【问题标题】:UIViewController: setToolbarItems vs navigationItemUIViewController:setToolbarItems 与 navigationItem
【发布时间】:2010-12-28 03:43:46
【问题描述】:

我的应用程序有一个由 UINavigationController 管理的 UIViewController 子类。

在我的 UIViewController 子类的 viewDidLoad 中,我试图将 UIBarButtonItem 添加到工具栏,如下所示:

settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings"
   style:UIBarButtonItemStylePlain target:self action:@selector(viewSettings:)];
[self setToolbarItems:[NSArray arrayWithObject:settingsButton]];

这不适合我,所以在谷歌搜索后,我尝试了这个:

[[self navigationItem] setRightBarButtonItem:settingsButton];

效果很好。从阅读UIViewController documentation 开始,我仍然对为什么 setToolbarItems 不起作用感到困惑。我在调试器中验证了该按钮位于 viewDidAppear 方法的 toolbarItems 数组中。按钮本身并没有出现在我的工具栏上。

所以,我的问题是,为什么 setToolbarItems 在第一个代码 sn-p 中对我不起作用?

我根本没有在我的 xib 中为这个视图控制器配置工具栏,如果这有什么不同的话。

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    是的,这会有所不同。当您在默认情况下看到基于导航的应用程序的视图栏时,该栏实际上不是工具栏,即导航栏。因此您可以通过引用 self.navigationItem 添加项目。

    【讨论】:

      【解决方案2】:
      1. [self setToolbarItems:[NSArray arrayWithObject:settingsButton]];本质上是填充导航控制器的底部工具栏 - 而不是顶部栏的左右按钮。

      2. 默认情况下,底部工具栏不显示。要显示它,您必须调用 [self.navigationController setToolbarHidden:NO]

      3. 以下是相关文档 - UINavigationController 类参考 工具栏:

      与导航控制器关联的自定义工具栏。 (只读)

      @property(nonatomic,readonly) UIToolbar *toolbar Discussion This 属性包含对由 导航控制器。访问此工具栏仅供 想要从工具栏显示操作表的客户。你 不应直接修改 UIToolbar 对象。

      通过自定义视图管理此工具栏的内容 与此导航控制器关联的控制器。对于每个视图 导航堆栈上的控制器,您可以分配一组自定义 使用 setToolbarItems:animated: 方法的工具栏项 UIViewController。

      此工具栏的可见性由工具栏隐藏控制 财产。工具栏也遵循 hidesBottomBarWhenPushed 属性 当前可见的视图控制器并隐藏和显示自己 根据需要自动进行。

      【讨论】:

        【解决方案3】:

        尝试使用

        [toolbar setItems:[NSArray arrayWithObject:settingsButton] animated:YES];
        

        代替:

        [self setToolbarItems:[NSArray arrayWithObject:settingsButton]];
        

        沙尼

        【讨论】:

          【解决方案4】:

          在 ipad 应用上,您必须将工具栏项设置为“topViewController”(是的,这违反直觉)。

          UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:catView];
          UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item 1" style:UIBarButtonItemStylePlain target:nil action:nil];
          UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item 2" style:UIBarButtonItemStylePlain target:nil action:nil];
          [nav setToolbarHidden:NO animated:YES];
          // WRONG: [nav setToolbarItems:[NSArray arrayWithObjects:addButton, nil]];
          // CORRECT (for ipad apps):
          [nav.topViewController setToolbarItems:[NSArray arrayWithObjects:item1, item2, nil] animated:NO];
          UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:nav];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多