我有一个视图/控制器(以及.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文档中的控制器包含示例,所以我不确定我做错了什么。
感谢您的帮助。
答案 0 :(得分:0)
我解决了这个问题 - 我需要使用initWithNibName而不是init。我在某处读到init会自动加载nib(因为UI正确加载它会这样做),但看起来除非你使用initWithNibName,否则不会连接出口。