【问题标题】:iOS - UINavigationController adding multiple right items?iOS - UINavigationController 添加多个正确的项目?
【发布时间】:2011-10-16 15:53:12
【问题描述】:

我有一个UINavigationController。我正在尝试在导航栏的右侧添加多个按钮。我怎样才能做到这一点? 它需要什么样的按钮? UIBarButtonUINavigationItem?

【问题讨论】:

    标签: iphone objective-c ios uinavigationcontroller


    【解决方案1】:

    从 iOS5 开始,您可以将一组条形按钮项分配给导航项的 rightBarButtonItems(注意复数)属性。

    【讨论】:

      【解决方案2】:

      我在 Xcode 4.5、iOS 6 中使用了 JRTurtons 答案并像这样实现它并且它可以工作:

      // Two buttons at the right side of nav bar
      UIBarButtonItem *addAttachButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAttachmentClicked:)];
      UIBarButtonItem *sendButton = [[UIBarButtonItem alloc] initWithTitle:LS(@"Send") style:UIBarButtonItemStyleBordered target:self action:@selector(sendClicked:)];
      self.navigationItem.rightBarButtonItems = @[addAttachButton,sendButton];
      

      但是,我应该提一下,UIBarButtonSystemItemPageCurl 不是这样工作的。

      【讨论】:

        【解决方案3】:

        我确信我在开发人员参考中读到导航栏中的其他按钮是不受欢迎的。我现在找不到那段。我自己没有做过,但发现这个链接似乎准确地概述了你需要做的事情:(http://www.mattdipasquale.com/blog/2010/11/02/how-to-add-multiple-uibarbuttonitems-to-uinavigationbar/)

        您是否考虑过使用导航控制器的工具栏属性?

        【讨论】:

        • 谢谢,这正是我想要的。这有点 hacky,但它似乎是向 UINavigationBar 添加多个项目的唯一方法
        • 如果你是正确的,额外的右栏按钮是官方不赞成的,jrturton 指出的 iOS5 中的新属性是苹果愿意改变主意的证据。非常鼓舞人心。 (这意味着上述黑客可能会在提交时被接受。)
        • 下面的答案应该是问题恕我直言的正确答案
        • 当然,发布此答案时,iOS 5 尚未发布。不过还是谢谢。
        • 链接失效,说明不再适用。可以更新一下吗?
        【解决方案4】:

        在 XCode 中向导航控制器添加任何设计都很容易。

        在你的场景中添加一个 UIView 将您需要的按钮添加到 UIView 然后将UIView拖放到navigationController中的右侧空间

        【讨论】:

          【解决方案5】:

          在 Xcode 7.1(可能甚至更早)中,您可以将多个项目添加到 UINavigationBar 的右侧或左侧,只需将它们拖入即可。如果您拖动到正确的位置,您会得到一个小的垂直条,指示在哪里该项目将被插入。

          【讨论】:

            【解决方案6】:

            实际上甚至有点老套,但同时做这些事情的方式更简洁:只需在 UINavigationItem 上定义一个类别,例如:

            UINavigationItem+Toolbars.h:

            @interface UINavigationItem (Toolbars)
            
            @property (nonatomic, retain) IBOutlet UIToolbar * rightToolBar;
            @property (nonatomic, retain) IBOutlet UIToolbar * leftToolBar;
            
            - (void)setRightToolBar:(UIToolbar *)_rightToolBar;
            - (UIToolbar *)rightToolBar;
            - (void)setLeftToolBar:(UIToolbar *)_leftToolBar;
            - (UIToolbar *)leftToolBar;
            
            @end
            

            UINavigationItem+Toolbars.m:

            #import "UINavigationItem+Toolbars.h"
            
            @implementation UINavigationItem (Toolbars)
            
            - (void)setRightToolBar:(UIToolbar *)_rightToolBar {
                self.rightBarButtonItems = _rightToolBar.items;
            }
            
            - (UIToolbar *)rightToolBar {
                return nil;
            }
            
            - (void)setLeftToolBar:(UIToolbar *)_leftToolBar {
                self.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:_leftToolBar] autorelease];
            }
            
            - (UIToolbar *)leftToolBar {
                return nil;
            }
            
            @end
            

            完成此操作后,只需在 IB 设置中分配一个工具栏(只需创建一个)并享受出现在导航项上的按钮。

            【讨论】:

            • 从 ios5 开始,您可以将一个条形按钮项数组分配为 rightBarButtonItems 属性。
            • 是的,您可以,但是您如何在 IB 中布置它们?我个人更喜欢将所有内容都放在工具栏上,以便查看彼此相邻的按钮的视觉外观。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多