【问题标题】:Modify the More button on the Navigation bar of a tab displayed from a UITabBarController's More tab修改从 UITabBarController 的更多选项卡显示的选项卡的导航栏上的更多按钮
【发布时间】:2013-09-08 21:42:32
【问题描述】:

我有一个带有 UITabBarController 的应用,它有五个以上的标签。

当我按下 More 选项卡时,我会转到 moreNavigationController,它是一个 UINavigationController

如您所见,我已经弄清楚了如何设置 TitleTintTable colorEdit 的样式更多屏幕上的按钮,以及按编辑按钮的配置屏幕。

当我在表格中选择一个项目时,我无法弄清楚如何设置名为 More 的后退按钮的样式。

每个标签都有自己的类,例如GRWTabSettingsViewController,它继承自GRWViewController,它为所有标签提供通用功能,然后继承自UIViewController。

设置 屏幕(或任何其他选项卡)上时,我正在尝试编辑 更多 后退按钮。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [(UIBarButtonItem *)[(UINavigationItem *)[(UINavigationBar *)[(UINavigationController *)[self navigationController] navigationBar] topItem] leftBarButtonItem] setTintColor:[UIColor darkGrayColor]]; 
    [self.navigationController.navigationBar.topItem.leftBarButtonItem setTintColor:[UIColor darkGrayColor]];
}

然而,这个 navigationController 显然是 parent,因为这些更改会应用到 More 屏幕而不是 Settings strong> 屏幕。

我有什么误解,如何修改我正在查看的屏幕导航栏上显示的按钮?

=== 解决方案 ===

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // use backBarButtonItem not leftBarButtonItem
    //[(UIBarButtonItem *)[(UINavigationItem *)[(UINavigationBar *)[(UINavigationController *)[self navigationController] navigationBar] topItem] leftBarButtonItem] setTintColor:[UIColor darkGrayColor]];
    //[self.navigationController.navigationBar.topItem.leftBarButtonItem setTintColor:[UIColor darkGrayColor]];

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
                                   initWithTitle:self.navigationController.navigationBar.topItem.title
                                   style:UIBarButtonItemStylePlain
                                   target:nil
                                   action:nil];
    [backButton setTintColor:[UIColor darkGrayColor]];

    self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;
    // these do not work
    //[self.navigationController.navigationBar.topItem.backBarButtonItem setTintColor:[UIColor darkGrayColor]];
    //[backButton setTintColor:[UIColor darkGrayColor]];
}

我花了一段时间才弄清楚我无法通过 self 格式化按钮,或者在分配给 self 后格式化按钮。

【问题讨论】:

  • 没有人对此有任何想法或评论吗?!

标签: ios uinavigationcontroller uitabbarcontroller uibarbuttonitem


【解决方案1】:

您应该自定义上一个导航项的backBarButtonItem,而不是topItem

【讨论】:

  • [...navigationBar.backItem.leftBarButtonItem setTintColor:[UIColor yellowColor]];
  • 屏幕 [...navigationBar.backItem.leftBarButtonItem setTintColor:[UIColor darkGrayColor]];对带有更多标题和编辑按钮的屏幕有影响。选择更多选项卡,选择设置或关于,然后选择其他选项卡。当我返回“更多”选项卡并使用“更多”按钮(这是我想要更改的)时,我会返回带有“更多”标题的屏幕,如果使用 rightBarButtonItem,“编辑”按钮将发生变化。 backItem 对更多按钮没有影响。我想更改当前显示屏幕上的左键。 ...
  • 使用 topItem 更改与使用 backItem 相同的项目,只是时间问题。在选择设置或约束时,Topitem将立即更改越位屏幕上的按钮。 span>
  • 你不懂我,我也不懂你。您不应该自定义 leftBarButtonItem,而是自定义 backBarButtonItem
  • 啊。不太清楚我是如何感到困惑的,但是您的backBarButtonItem 评论让我走上了正确的道路,尽管使用topItem 确实对我有用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多