在 Xcode 5 中以编程方式修改 UINavigationcontroller

Posted

技术标签:

【中文标题】在 Xcode 5 中以编程方式修改 UINavigationcontroller【英文标题】:Modifying UINavigation controller programatically in Xcode5 【发布时间】:2014-01-16 12:37:17 【问题描述】:

我有一个以编程方式生成的UINavigationController 应用于我的每个ViewControllers,但这个UINavigationController 是空白的。我需要添加一些文本、一张图片(如果可能的话)和两个按钮。

我已经设法对一个非常基本的应用程序做了类似的事情,该应用程序只有一个 ViewController 和 UINavigationController 以正常方式创建,但不知道如何处理以编程方式生成的。

我在XCode5/ios7 中使用故事板。

这是生成UINavigationController 并启动第一个ViewController 的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    MainViewController* mainVC = [mainStoryboard instantiateInitialViewController];
    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:mainVC];

    [self.window setRootViewController:navVC];

    [_window makeKeyAndVisible];

    return YES;

我尝试了一些我认为显而易见的事情,例如:

navVC.navigationBar.backgroundColor = [UIColor redColor];

改变颜色或:

[navVC setTitle:@"Test title"];

但没有任何改变,我可以改变标题的唯一方法是改变 mainVC 的标题

[mainVC setTitle:@"Test title"];

更改 MainViewController.m 文件中的标题本身没有任何作用。

那么我该如何修改UINavigationController (navVC)?

谢谢,

【问题讨论】:

如果您使用故事板,为什么不将导航控制器放在故事板上,而不是将故事板的内容嵌套到以编程方式创建的导航控制器中呢?可能有一个很好的理由,但我无法想象一个...... 我需要 NavigationController 成为每个具有静态标题和按钮的 VC 顶部的栏,例如如果有意义的话,每个页面上的布局都完全相同,而不是 VC 之间的实际导航。我能想到的唯一方法是以编程方式生成 NC 并将相同的“实例”应用于每个 VC。卢卡现在似乎已经给出了答案。 【参考方案1】:

您应该可以通过这种方式将图像设置到导航栏:

UINavigationBar *navBar = navVC.navigationBar;
UIImage *image = [UIImage imageNamed:@"YourNavBarImg.png"];
[navBar setBackgroundImage:image];

这可以改变导航栏的色调:

[navVC.navigationBar setTranslucent:NO];
[navVC.navigationBar setBarTintColor:[UIColor redColor]];

关于按钮(UIBarButtonItem)进入导航栏:

// where "self" is your current viewcontroller
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:button1,button2, nil];

【讨论】:

完美,这正是我需要的,我显然不是针对导航栏。谢谢。

以上是关于在 Xcode 5 中以编程方式修改 UINavigationcontroller的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode 5 iOS 7 中以编程方式编辑 plist?

如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]

在 xcode/ios 中以编程方式编辑 RTF/DOC 文件

如何在视图控制器中以编程方式切换视图? (Xcode,iPhone)

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue

如何在 swift Xcode 中以编程方式绑定/配对蓝牙 LE 设备?