【问题标题】:UIBarButton won't show in my UINavigationControllerUIBarButton 不会显示在我的 UINavigationController
【发布时间】:2012-06-22 15:49:21
【问题描述】:

我想制作一个带有导航栏和表格视图的简单视图。所以我创建了一个UINavigationController 的子类,并在其中添加了一个UITableView。我的也是UITableViewDataSourceUITableViewDelegate。现在我想在导航栏中添加UIBarButton,但它不起作用:

UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:[[Translator instance] getTranslation:@"Back"] 
                                                                  style:UIBarButtonItemStylePlain 
                                                                 target:self.parentViewController  
                                                                 action:@selector(dismissFiltersModal:)];          
self.navigationItem.backBarButtonItem = anotherButton;

显示视图但按钮没有错误。我该怎么做才能显示它?

【问题讨论】:

    标签: ios uinavigationcontroller uinavigationbar uibarbuttonitem


    【解决方案1】:

    贾法尔,

    按照 Apple 文档的建议,您应该避免继承 UINavigationController

    该类不用于子类化。

    这么说,你可以按照这些简单的步骤(给你一些建议):

    • 创建扩展UIViewController 的控制器(比如MyController)并在此处添加表。将您的控制器设置为该表的委托和数据源。如果您是由 xib 创建的,则需要一个用于表格视图的插座。

    [附注。你也可以继承UITableViewController,它有自己的表格视图]

    • viewDidLoadMyController 中自定义导航栏。

    例如

    UIBarButtonItem* myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(someSelector)];
    self.navigationItem.leftBarButtonItem = myButton;
    

    您还可以自定义标题。

    例如

    self.title = @"Your custom title";
    
    • 在您的代码中的某处创建UINavigationController 并添加MyController 的实例作为根视图控制器。

    例如:

    MyController* myCtr = // alloc-init here
    UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:myCtr];
    

    【讨论】:

    • 很好用 :) 由于我将该视图呈现为模态视图,是否有提供方法将调用者引用保存在 MyController 中?因为如果我使用 self.parentViewController 它引用 UINavigationController nc 而不是我呈现模态视图的对象(我猜这是正常的)。
    【解决方案2】:

    backBarButtonItem 应该设置在前一个视图控制器上,而不是当前要显示的控制器上。例如,如果您在视图 A 上,从它导航到 B,在 B 内将显示 A 的 backBarButtonItem而不是 B。

    如果您只想在导航栏的左侧显示一个项目,您可以改用leftBarButtonItem,它将在该控制器上显示一个普通的栏按钮。它将是矩形的,而不是像普通后退按钮那样的箭头。

    【讨论】:

      【解决方案3】:

      你试试这个怎么样:

      UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
              [backButton addTarget:self action:@selector(dismissFiltersModal:) forControlEvents:UIControlEventTouchUpInside];
              [backButton setTitle:@"Back" forState:UIControlStateNormal];
      
      // create button item -- 
      UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
      
      // add to toolbar
      self.navigationItem.leftBarButtonItem = backItem;
      

      【讨论】:

      • 我试过了,但按钮没有指向左的形状。文本只是向右移动了一点:/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多