要抓住所有人! - UIView over UITableView没有接收到水龙头

时间:2010-10-08 09:31:27

标签: uitableview uiview ios

这个应用程序的问题是TapCatchingController没有收到水龙头 在节标题或节之间。我想学习如何做到这一点。 我试图让我的示例程序尽可能小,但它仍然很长, 对不起然而,代码是自包含的。如果您将其复制并粘贴到您的 AppDelegate,你应该好好去! :)

提前致谢, --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

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题但是 只有我能看到的问题是viewController的视图添加了[self.view addSubview: vc.view];,但无法保证它始终位于窗口之上

可能缺少的代码行是[self.view bringSubviewToFront:vc.view];

但是,您可以通过对vc.view

应用不同的颜色来检查vc.view是否位于顶部或机器人

我仍然无法理解您在TableViewController子类中添加视图控制器视图的目标

希望它对你有所帮助