嵌套视图/控制器不接收事件

时间:2012-04-21 09:10:02

标签: iphone objective-c ios

我有一个视图/控制器(以及.XIB),上面有一个简单的NavigationBar。 NavigationBar有一个NavigationItem,它有一个BarButtonItem。我使用IB将menuTapped事件连接到文件所有者,我能够收到该事件。到目前为止,非常好。

在另一个项目中,我正在使用iOS 5.0控制器包含来试验嵌套控制器。当我将上面的视图/控制器(称之为“MainTableViewController”)嵌套到MainViewController时,我不再收到menuTapped事件。我验证了如果我使用MainTableViewController并使其成为主视图,则事件将触发。但是当我将它嵌套在MainViewController下时,MainTableViewController不会处理该事件。

这是我创建子视图/控制器的代码(我在MainViewController viewDidLoad中这样做):

- (void)viewDidLoad
{
    self.mainTableViewController = [[MainTableViewController alloc] init];
    //[self.mainTableViewController.view setUserInteractionEnabled:YES];
    [self addChildViewController:self.mainTableViewController];
    [self.mainTableViewController didMoveToParentViewController:self];

    [super viewDidLoad];

    CGRect frame = self.view.frame;
    self.mainTableViewController.view.frame = frame;
    [self.view addSubview:self.mainTableViewController.view];
}

这是我用来初始化子视图/控制器的代码。

当我运行应用程序时,XIB被加载并且UI看起来很好(我可以尝试将框架设置为其他坐标,看起来很好),但是当我点击BarButtonItem时,我的处理程序不会被调用。

我的理解是子视图应该在父视图之前获取事件,所以我必须错误地连接视图。我跟着iOS SDK文档中的控制器包含示例,所以我不确定我做错了什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题 - 我需要使用initWithNibName而不是init。我在某处读到init会自动加载nib(因为UI正确加载它会这样做),但看起来除非你使用initWithNibName,否则不会连接出口。