如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器

Posted

技术标签:

【中文标题】如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器【英文标题】:How to create Navigation Controller to connect Main View Controller to 2 Custom View Controllers 【发布时间】:2011-09-04 05:10:48 【问题描述】:

我需要一些有关如何创建将其根视图控制器加载到主视图控制器的导航控制器的帮助。然后,我希望导航控制器有两个选择器按钮(leftBarButtonItem 和 rightBarButtonItem),它们会将用户带到 2 个自定义视图控制器(AboutViewController 和 SettingsViewController)。

我能够成功地做到这一点,但相反,我在 MainWindow.xib 中创建了 2 个视图控制器,所有代码都在 AppDelegate.h 和 AppDelegate.m 中。这显然不是一个好习惯,尤其是当您有很多自定义视图控制器时。

谢谢。

【问题讨论】:

【参考方案1】:

您说得对,在 AppDelegate 中创建视图控制器不是一个好习惯。相反,您应该为每个视图创建一个单独的 ViewController。在您的 rootViewController 的实现文件中,创建方法来推送您想要在按下按钮时显示的单独视图控制器。这样的事情会起作用:

- (void)showAboutView

    AboutViewController *aboutViewController = [[AboutViewController alloc] init];
    [self.navigationController pushViewController:aboutViewController animated:YES];


- (void)showSettingsView

    SettingsViewController *settingsViewController = [[SettingsViewController alloc] init];
    [self.navigationController pushViewController:settingsViewController animated:YES];

然后,在按钮的选择器字段中包含这些方法。像这样:

UIBarButtonItem *aboutBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showAboutView)];

[[self navigationItem] setRightBarButtonItem:aboutBarButtonItem];

这应该注意推动您的观点。 navigationController 会自动显示一个“返回”按钮。

在 AppDelegate 中,您将创建 navigationController 并告诉它哪个视图将是 rootViewController,如下所示:

ViewController1 *vc1 = [[ViewController1 alloc] init];
mainNavigationController = [[UINavigationController alloc] initWithRootViewController:vc1];

希望这会有所帮助!

【讨论】:

嗨。我尝试了您的建议,结果出现了一些错误。您能在这里查看我的项目 > dl.dropbox.com/u/7539490/WinNav%202.zip 并帮助我解决这些错误吗?非常感谢! :D 1 - 创建 navigationController 和 rootViewController 的代码(目前在 AppDelegate 的底部,不在任何方法中)应该包含在应用程序的 didFinishLaunchingWithOptions 方法中。 2 - 您需要在 RootViewController 中同时导入 AboutViewController.h 和 SettingsViewController.h 文件。还要在 AppDelegate 中导入 RootViewController.h 文件。 3 - 推送设置和关于视图的代码很好,但是您只在导航栏中包含了一个按钮的代码。您将需要另一个按钮来推动另一个视图。您可以基于第一个按钮的代码,除了更改名称、操作并将其放在左侧之外,它应该完全相同。另外,您可以更改按钮类型,我将Action按钮包含在内仅供参考。 非常感谢 cmets!我真的很感激! :D 将再次编辑我的代码,希望现在一切正常。 :)

以上是关于如何创建导航控制器以将主视图控制器连接到 2 个自定义视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

IOS如何将一个数组连接到另一个视图控制器

如何使用重叠的透明视图控制器重新创建 FaceTime 的导航视图控制器过渡动画?

故事板上的侧边栏导航菜单

如何将 UINavigationControllerDelegate 连接到导航控制器?

如何通过界面生成器更改导航项标题?

想在标签栏视图控制器中添加一个简单的导航栏