尝试在 Swift 中以编程方式设置 rightBarButton

Posted

技术标签:

【中文标题】尝试在 Swift 中以编程方式设置 rightBarButton【英文标题】:Trying to set rightBarButton programmatically in Swift 【发布时间】:2016-07-10 00:32:00 【问题描述】:

看完这个问题:How to set back button text in Swift,

我开始将用于配置导航栏右键的代码移动到调用我正在呈现的 xib (ParticipantEditorViewController) 的视图控制器,如下所示:

import UIKit

class ViewController: UIViewController 

    /*
     * This is placeholder class. The code below will need to be added to whichever view controllers summon the participant editor, in their prepareForSegue method.
     */

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        print("snap")

        if let participantEditor = segue.destinationViewController as? ParticipantEditorViewController 
            print("crackle")

            let barButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: participantEditor, action: nil)
//            let barButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: participantEditor, action: Selector(participantEditor.presentActionMenu()))
            print("pop")

            navigationItem.rightBarButtonItem = barButton
        
    

但我仍然无法以编程方式配置导航栏。关于我所缺少的任何帮助?

【问题讨论】:

snap、crackle 和 pop 字符串正在打印到控制台,所以我知道 if-let 触发等... 【参考方案1】:

prepareForSegue 函数将在您转到另一个视图控制器时被调用。如果要配置导航栏,请在此视图控制器将要显示时调用的其他函数中进行,例如viewDidLoad

【讨论】:

感谢弗雷德里克的快速回复。我试图在“viewWillAppear”中这样做,但它不起作用。我在第一句话中提到的答案说它必须从“prepareForSegue”完成,因为导航栏不是呈现视图的一部分。至少我是这么理解答案的。 是的,要设置后退按钮,您需要在prepareForSegue 中执行此操作,因为该属性属于预览视图控制器。但是,要设置右栏按钮,您需要在当前视图控制器(显示右栏按钮的那个)中进行设置。 哇,好吧,这更有意义。我以为整个导航栏都归前一个屏幕所有,但这更有意义。

以上是关于尝试在 Swift 中以编程方式设置 rightBarButton的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式启动手势识别器?

在 Swift 中以编程方式设置 tabBarItem 标题

如何在 Swift 中以编程方式在水平线上设置约束? [关闭]

在 Swift 中以编程方式为 CollectionView 设置插图

在 Swift 中以编程方式设置动作监听器

在 Swift 中以编程方式设置 XIB 文件的约束