- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何从导航 Controller 而不是 View Controller 设置右栏按钮?
我一直在阅读有关编写 SOLID View Controller 的文章,它只作为 Controller 工作,而不是向它们添加所有内容。
帖子建议将导航逻辑移到 View Controller 之外(我同意)。此外, View Controller 真的不应该设置它嵌入的导航 Controller ,所以我试图将设置导航栏的代码移动到我的自定义 UINavigationController 类。
我部分成功了,我设法更新了颜色,但无法设置 rightBarButtonItem
。
将这些行添加到 View Controller 会起作用,但我想从 UINavigationController 子类中进行。
let settingsImage = UIImage(named: "settingsButton")
self.rightBarButton = UIBarButtonItem(image: settingsImage, style: UIBarButtonItemStyle.Plain, target: self, action: "showSettings")
self.navigationItem.rightBarButtonItem = self.rightBarButton;
我看过“默认导航按钮”这个问题,它建议创建父 View Controller 并从中子类化所有 View Controller ,但我真的不喜欢 View Controller 正在设置导航 Controller 这一事实。应该是相反的。
编辑:我得到了 self.navigationBar.items
。如果我将其设置为零,则不会显示任何内容。所以我可能需要改变它。尚不确定如何。
最佳答案
导航 Controller 不拥有显示的导航栏,因此也不拥有上面的按钮。
导航 Controller 将 View Controller 推送到屏幕并为它们提供导航栏。然后由 View Controller 配置导航栏(标题、栏按钮等)。除了后退按钮,它的默认配置是前一个 Controller 的标题。
所以无论如何,这不是“设置导航 Controller ”,而是配置属于 View Controller 的导航栏。
最好的地方是 View Controller 本身。
如果您想要在整个应用程序中使用默认按钮,那么您可以为所有 View Controller 创建一个“父子类”。 (但是您只能使用您可以使用的 Controller 类型)。
或者我过去通过使用类似这样的方法在 UIBarButtonItem
上创建类别来完成此操作...
+ (UIBarButtonItem *)myDefaultButtonWithTarget:(id)target action:(selector)action
这意味着你必须在你想要的每个 View Controller 中调用它......
self.navigationItem.rightBarButtonItem = [UIBarButtonItem myDefaultButtonWithTarget:self action:@selector(doSomething)];
但这意味着您只需要一行代码即可完成,而不必每次都进行配置。此外,您可以通过更改类别在任何地方更改按钮。
文档: https://developer.apple.com/reference/uikit/uinavigationbar
关于ios - 从导航 Controller 设置 rightBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165704/
我对使用 self.navigationItem.rightBarButtonItem 和 self.navigationController.navigationItem.rightBarButto
我的导航栏上有一个简单的编辑按钮,单击后会变成“完成”,我正在尝试将“编辑”和“完成”上的文本更改为大写文本,这可能吗?有人知道我可以查看的教程吗? self.navigationItem.right
如何启用/禁用 navigationItem.rightBarButton 项目?我在 -viewDidLoad 调用以下代码,但它什么也没做。 self.navigationItem.rightBa
这似乎不起作用。我究竟做错了什么? -(void)awakeFromNib{ UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem a
谁能帮我理解我的代码有什么问题。我没有得到它,我的代码编译得很好,没有任何错误,但我的图像没有显示出来。我确定我的图像存在于 中 Assets 文件夹,我也给出了我的图像的正确名称。我正在以编程方式进
我的 viewController 作为一个容器运行,并且有自己的 UINavigationBar。它不在导航 Controller 中。我的导航栏项目是这样设置的...... self.naviga
我正在构建一个电子商务应用程序,在 rightBarButtonItem 中包含购物车。我已经实现了扩展以在每个 UIViewControllers 中添加购物车 barButtonItem。我的 b
我想在 segmentedControl 更改时隐藏/显示 UIBarButtonItem,这是我的代码: @objc fileprivate func handleSegmentedChange()
注意:我可以通过在我的 barbutton 和 barbutton2 方法中将 leftbarbuttonitem 切换为 rightbarbutton item 来实现它。我只是想知道为什么它不能正
右栏按钮项目未出现在导航栏的右侧。我希望导航栏看起来与“App Store”中的导航栏类似 我尝试在 Storyboard和代码中执行此操作,设置图像内容模式,剪切到边界,并给它一个框架。 我也一直在
这让我很烦恼!我只是想以编程方式向导航栏添加一个右侧“flash”按钮,但出于某种原因,我无法使其显示。我的代码如下。谁能帮我?提前致谢。 //Note: flashButton is declar
我在导航栏的 View 中有一个编辑 rightbarbuttonitem。我是在 Storyboard/IB 的帮助下设置的,而不是以编程方式设置的。现在,我想要的只是在按下“完成”barbutto
我有两个 View Controller ,每个 View Controller 都需要在导航栏右上角有一个登录按钮。 在 viewController1#viewDidLoad 中,我像这样设置了
我正在以编程方式创建 UINavigationController 并将我的 ViewController 添加到其中: // wrap in a navigation controller let
我的 UIViewController 中的问题是 rightBarButtonItem 没有垂直对齐。我想将按钮向下移动 10 个像素。 let cancelButton = UIBarButton
在导航栏中,我添加了两个右侧的 barButtonItems: [self.navigationItem setRightBarButtonItems:@[firstBarButton,secondB
尝试将刷新按钮显示为 rightBarButtonItem 时遇到一个奇怪的问题。 总之,我已经实现了,但是运行应用程序时什么也看不到。但是,当我单击 Storyboard Debug --> Vie
我想设置导航栏上“完成”按钮的颜色,如下图: 尽管我已将代码设置为 self.doneButton.enabled = NO; 但“完成”按钮仍然是白色。它不会像图像那样改变颜色。 如何设置代码来更改
我有一个 UIViewController 设置为在其 UINavigationItem 右侧显示一个信息按钮,如下所示: UIButton *infoButton = [UIButton butto
我正在尝试设置一个导航按钮,使其显示为红色和半粗体。我设法更改了颜色,但在将其更改为半粗体时遇到了问题: navigationItem.rightBarButtonItem = UIBarButton
我是一名优秀的程序员,十分优秀!