gpt4 book ai didi

iOS 右导航按钮不显示在 UINavigationBar 中

转载 作者:可可西里 更新时间:2023-11-01 05:30:58 24 4
gpt4 key购买 nike

我有以下 View Controller 层次结构:

  • 查看 Controller VC1
  • Tab Bar Controller TBC1 - 在 Storyboard中进行配置,以生成一个 Table View Controller TVC1 和一个 Map View Controller MVC1
  • TableView Controller TVC1
  • TableView Controller TVC2

在 VC1 中,我这样做:

[self.navigationController pushViewController:TBC1 animated:YES];

这正确地调出了标签栏 Controller ,焦点是 TVC1。

TVC1 在其导航栏中显示后退按钮(通过 VC1 代码以编程方式创建),这将使我转到 VC1,这是预期的。

但是,从 TVC1 开始,我需要再导航到 TVC2。为此,我尝试将右键添加到 TVC1 导航栏,但它没有显示。

这是我在 TVC1 中使用的代码(rightButton 是 TVC1 的 UIButton 类型属性):

   self.rightButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
target: self
action: @selector(MySelector:)];
self.rightButton.style = UIBarButtonItemStyleBordered;
self.rightButton.title = @"";
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: self.rightButton, nil];

(指定空白标题和样式只是为了确保这是否是导致此问题的原因,我实际上并不需要这些值)

MySelector 在 TVC1.h 中声明为:

- (void) MySelector:(id)sender;

它也得到了正确的实现。

但是上面的rightButton在TVC1导航栏中没有显示。

我错过了什么?我怀疑它与 VC1 和 TVC1 之间的 TBC1(选项卡栏)有关,并且它以某种方式重置了导航属性。

但后来我争辩说我在 TVC1 上看到了导航栏,还有一个指向 VC1 的左按钮。我在 TBC1 中检查过,self.navigationItem.rightBarButtonItems 中有 1 个对象,这绝对是我要添加的 rightButton。

我哪里错了?

注意:以上内容适用于所有 iOS 5.0、5.1 和 6.0 模拟器。

最佳答案

在我看来,您的 Storyboard中 TVC1 和 TVC2 之间缺少 UINavigationController。如果您使用的是 Storyboard,那么您可以在导航 Controller 本身上创建导航项添加按钮类型,并有一个 PUSH segue 到 TVC2。参见 this图表是否有意义。如果这不能解决您的问题,请上传示例代码,我会看看。

[编辑]

我通过在 Storyboard 中创建 View Controller 结构来重现您的问题。

storyboard

如果你注意到这里 TVC1 没有它的 UINavigationController 但它是从 VC1 继承的。您的问题的解决方案不是将 rightButton 添加到 self 上,而是将其添加到 self.parentViewController 中,您将在 TVC1 中看到 rightButton。但请注意,它也会出现在 MVC1 中,因为它属于 TBC1 的父级。如果你不想在那里,你可以在 MVC1 的 viewWillAppear 中隐藏右栏按钮。以下是代码。

self.rightButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
target: self
action: @selector(MySelector:)];
self.rightButton.style = UIBarButtonItemStyleBordered;
self.parentViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: self.rightButton,nil];

如果您想将右键添加到 TVC1 的导航 Controller 中,则需要将 TVC1 嵌入到 UINavigationController 中。为此,在 Storyboard中选择 TVC1 屏幕 -> 编辑器 -> 嵌入 -> 导航 Controller 。当你这样做时,你的代码也会工作,并会显示右键,但由于 Storyboard的结构,你将有两个导航 Controller (见下图)。您需要将 Parent 的导航 Controller 隐藏到已加载的 TVC1 View 中,并使用左键弹出到 Parentview Controller。您在 MVC1 中执行相同的操作。

希望对您有所帮助!快乐编码:)

output

关于iOS 右导航按钮不显示在 UINavigationBar 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13165959/

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