0

我有一个视图/控制器(连同 .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 文档中的控制器包含示例,所以我不确定我做错了什么。

谢谢你的帮助。

4

1 回答 1

0

我解决了这个问题——我需要使用 initWithNibName 而不是 init。我在某处读到 init 会自动加载 nib(它会这样做是因为 UI 正确加载),但似乎除非您使用 initWithNibName,否则插座不会连接。

于 2012-04-22T10:03:35.433 回答