gpt4 book ai didi

ios - 从 UINavigationController 中控制 UINavigationItem 内容

转载 作者:行者123 更新时间:2023-11-29 11:38:26 25 4
gpt4 key购买 nike

我正在尝试从 UINavigationController 的中央位置(然后 View Controller 可以添加自己的按钮)以编程方式为整个应用程序设置 UINavigationItem 的内容,例如:

UINavigationController

viewDidLoad 方法:

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Login"];
[self.navigationBar pushNavigationItem:item animated:NO];
self.navigationItem.topItem.leftBarButtonItems = [[NSArray alloc] initWithObjects: filterBtn, editBtn, nil];
self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects: userBtn, infoBtn, mapsBtn, nil];

但是,当从 UINavigationController 调用 pushViewController 时,显示的 UINavigationItem 被设置为默认值,其标题等于场景。

[self pushViewController:viewController animated:NO];

无需调用 pushViewController,我就能看到我的自定义 UINavigationItem

问题可能是:

  1. 我正在使用 storyboard 实例化 View Controller :UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier: screen];

    /li>
  2. 我应该使用 [self presentViewController:viewController animated:NO completion:nil] 而不是 push,但是,此方法完全隐藏了导航栏

  3. 解决方法可能是只显示 UIView,但我现在宁愿避免它。

我在这里做错了什么?

最佳答案

每当 UIViewController 被推送时,导航项(左、中、右)都会被替换。

如果 UIViewController 没有设置自定义项(左、中、右),导航 Controller 将推送默认项。

在您的情况下,您可以做的是,在 UINavigationController 中实现 UINavigationControllerDelegate 并实现此方法 navigationController(UINavigationController, willShow: UIViewController, animated: Bool ) 方法。您可以在推送 UIViewController 之前分配默认导航项。并且还可以检查是否设置了任何自定义项。

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {

if viewController.navigationItem.leftBarButtonItem == nil { // viewController.navigationItem.leftBarButtonItems
// assign default item
}

if viewController.navigationItem.rightBarButtonItem == nil { // viewController.navigationItem.rightBarButtonItems
// assign default item
}

if viewController.navigationItem.titleView == nil {
// assign default item
}
}

你也可以看看官方文档here .请参阅左侧项目 和自己的话部分。

选项 2

创建一个 BaseViewController 并使用 BaseViewController 继承您的所有 View 。然后在 BaseViewController 中,您可以设置所有默认导航项。

class BaseViewController : UIViewController {
override func viewDidLoad() {
self.navigationItem.leftBarButtonItems = [[NSArray alloc] initWithObjects: filterBtn, editBtn, nil];
self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects: userBtn, infoBtn, mapsBtn, nil];
}
}

关于ios - 从 UINavigationController 中控制 UINavigationItem 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com