从Nib加载UINavigationController子类

时间:2011-01-03 17:49:40

标签: iphone objective-c cocoa-touch uikit interface-builder

我的情况如下:我的班级SettingsViewControllerUINavigationController的子类。该类包含其rootViewController的逻辑。例如,它充当该根视图控制器中两个表视图的委托和数据源。

我以编程方式设置它没有问题。在SettingsViewController的初始值设定项中,我可以创建一个额外的UIViewController作为根视图控制器,将表视图放在其视图中,并将其委托和数据源设置为self

但我想通过Nib加载该根视图。问题是,我不知道如何将Nib与我的SettingsViewController连接起来,如何设置委托和数据源。无法从Nib中访问SettingsViewController。 “文件所有者”代表根视图控制器,而不是SettingsViewController

如何从我的根视图控制器Nib中访问我的UINavigationController子类?

提前致谢。

2 个答案:

答案 0 :(得分:2)

你可以在你的笔尖内声明一个视图并设置类SettingsViewController的视图(如果它是一个视图)。

或在IB中拖动视图控制器并设置类类型SettingsViewController

//编辑:所以你想提出像MFMailComposerViewController这样的视图。我的应用程序中也有一个MessageViewController几乎相同:

MessageViewController *mView = [[MessageViewController alloc]initWithNibName:@"MessageView" bundle:nil];
mView.navController = [[UINavigationController alloc] initWithRootViewController:mView];
[masterView presentModalViewController:mView.navController animated:YES];
[mView release];

请注意navControllerUINavigationController,它在IB中连接到导航控制器。

答案 1 :(得分:1)

您将无法访问笔尖中文件所有者之外的对象。从该笔尖加载视图后,您需要以编程方式设置这些属性;您的rootViewController可以在其-viewDidLoad中设置其表的委托和数据源。

另外我要问,你为什么要继承UINavigationController。类引用警告您“此类不用于子类化”。如果只需要这个SettingsViewController,那么你的委托/数据源逻辑可能会有一个更好的地方。