【问题标题】:How to reload Navigation bar如何重新加载导航栏
【发布时间】:2013-02-02 11:20:08
【问题描述】:

UITableView 中,我使用按钮配置self.navigationItem.leftBarButtonItem。现在我想重新加载此按钮以更新此按钮上的文本,但它位于 Navigation bar 上。我可以通过

更新UITableView
 [self.tableView reloadData]

但是如何更新导航栏?

更新:我不是初始化按钮的标题,而是重新加载它。所以任何初始化代码(如self.navigationItem.leftBarButtonItem.title = @"balabala")都不起作用,因为它不会立即生效。

【问题讨论】:

  • 你能发布更多关于你已经尝试过的代码吗?是从主线程调用的吗?
  • 我有类似的问题,点击刷新按钮后,我想在导航项中设置标题,包括上次更新时间戳。我曾尝试在主线程上调用[titleView setNeedsDisplay];,但标题不会更新几秒钟或直到执行任何segue,而[self.tableView reloadData] 重新加载就好了。
  • 嗨 dev-null,self 是导航控制器当前显示的 UIViewController 吗?如果是这样,您应该能够(如某些答案中所述)使用self.navigationItem.title = @"New TITLE!"; 更改标题如果这不起作用,可能会有一些解释(例如self 不是navigationController 当前显示的那个)这是容器
  • self 是我的 UiTableViewController,嵌入在导航控制器中。当我从其他控制器(prepareForSegue)更改标题时,目标视图显示正确的标题,但是当当前显示的视图控制器尝试更改标题时,它需要几秒钟才能在导航栏中显示新值。

标签: ios uitableview uinavigationbar uibarbuttonitem


【解决方案1】:

只是改变leftBarButtonItem上的文字?

self.navigationItem.leftBarButtonItem.title = @"Back"; // or whatever text you want

【讨论】:

    【解决方案2】:

    试试这个

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Title" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    

    希望对你有所帮助..

    编辑:-

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc] initWithTitle: @"Title" style: UIBarButtonItemStyleBordered target:self action:@selector(OnClick:)];
    
    [[self navigationItem] setBackBarButtonItem: btnBack];
    

    【讨论】:

    • @ybbaigo 我添加了另一种方式,尝试一下,如果可行,请告诉我?
    • 非常感谢,但据我了解,除非push view,否则backBar不会显示在导航栏上,我想一直在导航栏上显示这个按钮。
    • 不,当您调用上述代码时,如果您使用了导航控制器,此代码将更改您设置为 btnBack 的导航控制器按钮文本。注意这里我不是在创建导航栏,我只是在创建一个 UIBarButtonItem。如果您有任何疑问,请告诉我..
    • 抱歉拖了很久才回复。我想和你确认一件事:你的两种方法有什么区别?从 leftBarButtonItem 到 backBarButtonItem?使用第二种方法(backBarButtonItem),按钮不会显示在导航栏上
    • 推广是什么意思?
    【解决方案3】:

    您是否尝试设置文本,使用

    self.navigationItem.leftBarButtonItem.title
    

    【讨论】:

      【解决方案4】:

      您需要使用以下语句:

      self.navigationItem setLeftBarButtonItem:cancelButton animated:YES];  
      

      换句话说,您需要 setLeftBarButtonItem:animated 消息而不是标准消息。这将重新加载带有动画的按钮文本。如果您有兴趣在某个时候更改后退按钮,这同样适用于后退按钮。

      【讨论】:

        【解决方案5】:
         @interface Myviewcontroller : UIViewController
        {
               UIBarButtonItem *barBtnBack;
               UIButton *btnQuestion;
        }
        

        //ViewdidLoad

         btnQuestion = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 25)];
                [btnQuestion setBackgroundImage:[UIImage imageNamed:@"question-mark2x"] forState:UIControlStateNormal];
                [btnQuestion addTarget:self action:@selector(goBacktomain)
                      forControlEvents:UIControlEventTouchUpInside];
                barBtnBack =[[UIBarButtonItem alloc] initWithCustomView:btnQuestion];
            [self.navigationItem setLeftBarButtonItem:barBtnBack];
        

        注意-当你想改变导航按钮标题时改变 btnQuestion 标题

        【讨论】:

          【解决方案6】:

          如果您想更改 NavigationBar 标题,请尝试以下方法之一:

          [self.navigationController.navigationItem setTitle:@"Title"];
          [self.navigationItem setTitle:@"Title"];
          [self setTitle:@"Title"];
          

          如果您想更改按钮标题,请将其放在同一个类中:

          - (void)setLeftBarButtonTitle:(NSString *)title action:(SEL)selector
          {
              UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleBordered target:self action:selector];
              [self.navigationItem setLeftBarButtonItem:leftButton];
          }
          
          - (void)setRightBarButtonTitle:(NSString *)title action:(SEL)selector
          {
              UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleBordered target:self action:selector];
              [self.navigationItem setRightBarButtonItem:rightButton];
          }
          

          设置按钮标题和动作的示例:

          // Change button titles and actions any time
          [self setLeftBarButtonTitle:@"Back" action:@selector(goBack)];
          [self setRightBarButtonTitle:@"Something" action:@selector(doSomething:)];
          
          // Change button titles with no actions
          [self setLeftBarButtonTitle:@"Nothing" action:nil];
          [self setRightBarButtonTitle:@"Nothing" action:nil];
          
          // Remove buttons from navigation bar
          [self.navigationItem setLeftBarButtonItem:nil];
          [self.navigationItem setRightBarButtonItem:nil];
          

          【讨论】:

          • @dev-null-dweller 试试上面的方法并告诉我们? :)
          • 我试过了,但他们也需要一些时间来显示新标题:(
          【解决方案7】:

          试试这个:

          UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
                                             initWithTitle:@"your_title"
                                             style:UIBarButtonItemStyleBordered
                                             target:self
                                             action:@selector(backBtnPressed:)];
              self.navigationItem.leftBarButtonItem = backButton;
          

          【讨论】:

          • 不要忘记在你的答案中添加解释。
          • 关于如何替换navigationItem中的titleView有什么提示吗?
          【解决方案8】:

          我在 Swift 中解决了它,但是如果显示键盘,它就会隐藏。

          navigationController?.loadView()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-08
            • 1970-01-01
            • 2014-06-26
            • 2017-11-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多