从 StoryBoard 获取对 TableViewController 中左按钮的引用

Posted

技术标签:

【中文标题】从 StoryBoard 获取对 TableViewController 中左按钮的引用【英文标题】:Get reference to left button in TableViewController from StoryBoard 【发布时间】:2013-11-21 15:55:57 【问题描述】:

我在情节提要中遇到带有后退按钮的问题。

故事板定义如下:

我的问题是,在按下 segue 后,我无法获得返回按钮的任何参考。 我的 viewcontroller 继承自 UITableViewController 类。

我已经尝试了通常的嫌疑人:

self.navigationItem.leftBarButtonItem, self.navigationItem.backBarButtonItem. 

在所有这些中,引用都是零。

SettinsViewControllerviewDidLoad 中我只这样做:

[super viewDidLoad];

[self.tableView registerNib:[UINib nibWithNibName:[CredentialTableViewCell nibName] bundle:nil]
     forCellReuseIdentifier:[CredentialTableViewCell reuseIdentifier]];

self.tableView.backgroundView = nil;
self.tableView.backgroundColor = HEXCOLOR(0xebf2f9ff);

按下 segue 时我什么都不做,后退按钮是使用前一个视图控制器标题自动生成的,而不是使用我的“后退”标题,我无法获得对它的引用。

有谁知道我怎样才能获得这个自动生成的后退按钮的参考?

提前致谢。

【问题讨论】:

【参考方案1】:

你试过了吗:

UIBarButtonItem *backButton = self.navigationItem.backBarButtonItem;

【讨论】:

【参考方案2】:

作为健全性检查,您的 TableViewController 嵌入在 UINavigationController 中,对吗?从图片上看有点难。

其次,我的后退按钮实际上是视图的一个属性,它将视图控制器到屏幕上。因此,如果您想使用显示给用户的后退按钮,您需要询问 ViewController 推动当前视图的后退按钮。

来自Docs:

如果***视图控制器没有自定义左栏按钮项,但前一个视图控制器的导航项在其 backBarButtonItem 属性中有有效项,则导航栏显示该项。

因此,要让您的后退按钮显示“后退”,请更改 Previous 视图控制器(推动设置视图控制器的那个)的 Back Button 字段.

【讨论】:

感谢您的回答,我有一个导航控制器,我理解您的建议。但是我不知道为什么即使在父级中后退按钮也为零,但是如果我执行 parentViewController.navigationBar.items,我确实得到了两个导航项,只是左侧不是我需要的按钮(我需要暂时禁用它)。【参考方案3】:

最后我决定锁定所有界面而不是只锁定那个按钮,在一个小细节上浪费了太多时间。

我是这样做的:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

在这个答案中找到了建议:How can I disable the touch detection?

【讨论】:

以上是关于从 StoryBoard 获取对 TableViewController 中左按钮的引用的主要内容,如果未能解决你的问题,请参考以下文章

从 Storyboard 中获取 ViewController

在视图期间更改后重新排列自动布局

是否可以以编程方式从 Swift/Objective-C 中的 UIViewController 或 Storyboard 中获取基本 UIViewController 的标识符?

从 Storyboard 降级到 XIB

如何设置 UITableView 部分保持固定?

获取Storyboard中的视图控制器