【问题标题】:UINavigationViewController - different right button on each subsequent VC?UINavigationViewController - 每个后续VC上的不同右键?
【发布时间】:2017-01-16 03:19:22
【问题描述】:

我正在尝试使用以下简单的工作流程构建一个相当简单的电话簿应用程序:FirstViewController -> SecondViewController -> ThirdViewController 等。

我的理解是UINavigationController 正是处理此类工作流程的人。所以,我在NavigationController 中嵌入了FirstViewController,并在控制器之间添加了segues。到目前为止一切顺利。

我的问题是使每个控制器上的导航栏具有不同的右键(例如,详细视图将具有“编辑”右键,编辑视图将具有“保存”按钮等)我我只能在FirstViewController(通过Xcode)上添加右键,因为这个VC得到了导航项(当它嵌入到导航控制器中时)。随后的 VC 没有这样的导航项,即使他们获得带有“返回”按钮的导航栏,我也找不到添加右键的方法(在 Xcode 中)。

为每个后续视图控制器添加此类右按钮的推荐方法是什么(通过 Xcode 或以编程方式)?

【问题讨论】:

    标签: ios swift xcode uinavigationcontroller uinavigationbar


    【解决方案1】:

    您可以在每个 VC 中添加一个导航栏,并在里面添加您想要的项目。

    【讨论】:

    • 谢谢,但它似乎不起作用 - 每当我将导航栏拖到 VC 时,它最终都会成为顶部视图的子视图,这没有任何意义。有什么我可能会丢失的吗?
    【解决方案2】:

    这有点棘手。首先,您必须向第二个和第三个视图控制器添加一个导航项。在库中是这样的:

    只需将其拖到第二个视图控制器上,然后再拖到第三个视图控制器上。

    现在您将能够向第二个和第三个视图控制器添加一个右栏按钮项,就像您为第一个视图控制器所做的那样。

    【讨论】:

    • 谢谢,但它似乎不起作用。这是 VC 的原始内容:s24.postimg.org/83kocwj9x/…。现在,当我将导航项目拖到这个 VC 时,确实,我得到了一个名为“标题”的导航项目,但它缺少“左栏按钮项目”和“右栏按钮项目”子项目,我无法向其添加任何按钮:s24.postimg.org/700k0xymt/…
    【解决方案3】:

    如果您想以编程方式进行,您可以直接从它们自定义每个 UIViewController 的 NavigationBar 内容。为此,您必须从它们的 navigationItem 属性中设置这些元素。 从中可以设置多个元素,包括但不限于rightBarButtonItemsleftBarButtonItems

    一旦 UIViewController 被推送到 UINavigationController 堆栈,这些设置将用于自定义导航栏的外观。

    更多详情,请查看UINavigationItem 文档

    编辑:这里有一个很好的解释,说明如何仅从情节提要https://www.andrewcbancroft.com/2016/04/14/adding-buttons-to-the-navigation-bar-with-storyboards/实现您想要的目标@

    【讨论】:

      【解决方案4】:

      在每个视图控制器中编写该方法,并从viewDidLoad中调用

          func customizeRightBarButton() {
      
          let rightBarButtonImage: UIImage = UIImage(named: "customImage")
          let rightBarButton: UIButton = UIButton(type: .Custom)
          rightBarButton.setImage(rightBarButtonImage, forState: .Normal)
          rightBarButton.frame = CGRectMake(0, 0, 23, 23)
          let barButtonItem: UIBarButtonItem = UIBarButtonItem(customView: rightBarButton)
          rightBarButton.addTarget(self, action: #selector(ViewController.rightButtonClicked(_:)), forControlEvents: .TouchUpInside)
          self.navigationItem.rightBarButtonItem = rightBarButton
      }
      

      如果您想隐藏返回栏按钮,请使用

          self.navigationItem.hidesBackButton = true
          self.navigationItem.setHidesBackButton(true, animated: true)
      

      【讨论】:

        【解决方案5】:

        我找到了一种简单的方法。

           let barButton = UIBarButtonItem(image: UIImage(named: "YourImage"), style: .plain, target: self, action: #selector(yourClass.yourFunction(_:)))
        
           self.navigationController?.topViewController?.navigationItem.rightBarButtonItem = barButton
        

        添加此代码和所有要添加右键的视图控制器,除了后退按钮。

        希望这段代码对你有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-07
          • 1970-01-01
          • 2014-07-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-03
          相关资源
          最近更新 更多