views:

7

answers:

0

Hey guys,

The problem with this app is that the TapCatchingController does not receive the taps that are on section headers or between sections. I'd like to learn how I should do that. I have tried to keep my sample program as small as possible, but it's still rather long, sorry for that. The code is however self contained. If you copy and paste it in your AppDelegate, you should be good to go! :)

Thanks in advance, --Nick

#import <UIKit/UIKit.h>

//-----------------------------------------------------------------------------------------------
//Class InfiniteViewController: Says something when view is tapped, view is invisible to the user
@interface TapCatchingViewController : UIViewController {} @end
@implementation TapCatchingViewController
- (void) loadView {
    self.view = [[UIView alloc] init];
    self.view.alpha = 1.0;
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"You tapped this! Tuhm-dudu-dum"); }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }
- (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear: animated]; }
@end

//-----------------------------------------------------------------------------------------------
//Class SuperViewControoler: A tableview who has on top of it an InfiniteViewController's view
//Any tap on a SuperViewController's view should pass through the InfiniteViewController
@interface SuperViewController : UITableViewController {
    TapCatchingViewController * vc;
}
@end

static const int sections = 7;
static const int rowsPerSection = 9;

@implementation SuperViewController
- (void) viewDidLoad {
    vc = [[TapCatchingViewController alloc] init];
    vc.view.frame = CGRectInfinite;
    [self.view addSubview: vc.view];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return sections; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return rowsPerSection; }
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return @"Section Header"; }
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 250.0f; }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.textLabel.text = @"Meow, meow.";
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {}

- (void)dealloc {
    [vc dealloc];
    [super dealloc];
}
@end

//-----------------------------------------------------------------------------------------------
//Class AppDelegate! The usual stuff :) 
@interface InfiniviewsAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UIViewController * vc;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end

@implementation InfiniviewsAppDelegate
@synthesize window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    vc = [[SuperViewController alloc] initWithStyle: UITableViewStyleGrouped];
    [window addSubview: vc.view];
    [window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {}
- (void)applicationDidBecomeActive:(UIApplication *)application {}
- (void)applicationWillTerminate:(UIApplication *)application {}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {}
- (void)dealloc {
    [vc release];
    [window release];
    [super dealloc];
}
@end