【问题标题】:Can you set a navbar's edit button in Interface Builder?你可以在 Interface Builder 中设置导航栏的编辑按钮吗?
【发布时间】:2018-07-31 01:56:17
【问题描述】:

设置表格视图以进行编辑非常简单。只需在您的 UITableViewController 中添加一行:

self.navigationItem.rightBarButtonItem = self.editButtonItem;

此行在导航栏上添加了一个编辑按钮,该按钮会将表格更改为编辑模式,并在编辑时将其按钮文本更改为“完成”。

是否可以在 Interface Builder 中进行设置?我看到您可以添加 UIBarButtonItem 并将其“标识符”设置为“编辑”,但我没有看到预期的行为。

顺便说一句,属性面板中的“标识符”有什么作用?

【问题讨论】:

    标签: cocoa-touch interface-builder


    【解决方案1】:

    是的,您可以在 Interface Builder 中添加 UIBarButtonItems,它们应该可以工作。

    标识符允许您使用预设按钮(如编辑或重新加载),或者您可以选择自定义并制作自己的按钮。

    编辑:如果您能解释如何通过 IB 添加的 UIBarButtonItems 不起作用,我可能会提供进一步的帮助。

    更新: UIViewController.editButtonItem 是一个特殊的方法,它返回一个调用视图的 setEditing 方法的 UIBarButtonItem。您可以通过创建一个执行相同操作的方法并将选择器连接到 IB 中的 UIBarButtonItem 来实现相同的效果。

    在你的头文件中:

    - IBAction edit:(id)sender;
    

    在你的实现文件中:

    - (IBAction) edit:(id)sender {
        [self setEditing:YES animated:YES];
    }
    

    然后将选择器连接到 UIBarButtonItem。

    但是,您可能无法在默认的基于导航的应用程序模板中创建此连接,因为表格视图位于单独的文件中。

    【讨论】:

    • - 新项目:基于导航的应用程序。 - RootViewController.m:取消注释 viewDidLoad 和 self.nav... 行 - 运行。没有表格数据,但单击编辑以查看它是否发生了变化您可以推荐该行并通过更改 MainWindow.xib 来获取行为吗?还是仅以编程方式设置?
    • 那么如何在 Interface Builder 中专门创建一个 editButtonItem 呢?恕我直言,您当时选择回答一个不同的(微不足道的)问题。
    【解决方案2】:

    看看这里:http://blog.tmro.net/2009/05/uitabbarbuttonitem-did-not-change-its.html

    如果您希望您的按钮能够动态更改其标签,请确保您使用自定义标识符,否则其标题将是不可变的。

    【讨论】:

      【解决方案3】:

      从 Xcode 9.4.1 开始,我们似乎仍然无法在 Interface Builder 中专门执行此操作。不过,在代码中很容易做到。

      您根本不需要在 IB 中设置按钮。只需将此代码添加到您的 viewDidLoad 方法中:

      navigationItem.leftBarButtonItem = editButtonItem
      

      这会自动设置“编辑”按钮,该按钮会变为“完成”,以便用户可以结束编辑。

      要执行与编辑过程相关的任何自定义操作,请覆盖视图控制器的 setEditing(_ editing: Bool, animated: Bool) 方法。

      例如,如果您有一个表格视图需要打开和关闭其编辑,您可以这样做:

      override func setEditing(_ editing: Bool, animated: Bool) {
          super.setEditing(editing, animated: animated)
          tableView.setEditing(editing, animated: animated)
      }
      

      请务必在此处致电super.setEditing

      注意:如果你使用UITableViewControllersetEditing 已经在超类中设置来处理表格视图。您不需要覆盖它,除非您在启用/禁用编辑时要包含其他自定义代码。

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多