【问题标题】:Adding BarButtonItem To NavigationBar将 BarButtonItem 添加到 NavigationBar
【发布时间】:2011-09-22 06:26:51
【问题描述】:

我通过 IB 添加了一个 NavigationBar,并尝试以编程方式添加一个 BarButtonItem .....但它不起作用。

- (void)viewDidLoad { 

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    [self.navigationItem setLeftBarButtonItem:self.addButton];
    [super viewDidLoad];
}

【问题讨论】:

  • 你看到没有任何按钮的导航栏了吗?
  • 你把这个固定的Chandu搞定了吗?
  • 是的@chown 我把它修好了。但以不同的方式

标签: iphone ios xcode uibarbuttonitem uinavigationitem


【解决方案1】:

尝试这样做:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped:)];

【讨论】:

    【解决方案2】:

    在你的情况下试试这个:

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    [self.navigationItem setLeftBarButtonItem:addButton];
    

    我想这可能有效。

    【讨论】:

    • 我认为它适用于以编程方式添加的导航栏...但我是从 IB 中添加的
    • 如果您从 IB 添加了 BarButtonItem,那么您根本不需要编写此代码。只需为栏按钮项定义一个 Outlet,将其放在导航栏上并连接其方法,就像我们在 UIButtons 的情况下所做的那样。
    • ...是的,我做到了...但我想添加一个“编辑”按钮作为右栏按钮,点击后会变为“完成”。
    • 在这种情况下,如果 BarButtonItem 的标题是“编辑”,则在 EditTable: 方法中添加一个检查标志,像这样[editButton setTitle:@"Done"]; 将其更改为“完成”,并在用户单击时保持切换那个按钮。如果您希望将其设为蓝色,请在标题为“完成”时将样式更改为由 [editButton setStyle:UIBarButtonItemStyleDone]; 完成。
    【解决方案3】:

    您所做的是正确的,但到目前为止,您只是将 addButton 添加到 UINavigationItem 作为 leftBarButtonItem。要将其添加到导航栏,您需要将导航项推送到其上,类似于将新 UIViewController 添加到 UINavigationController 的方式。假设您将 UINavigationBar 命名为 navBar:

    UINavigationItem *navigationItem = [[UINavigationItem alloc] init];
    
    self.addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    [navigationItem setLeftBarButtonItem:self.addButton];
    
    [self.navBar pushNavigationItem:navigationItem animated:NO];
    [navigationItem release];
    

    希望有帮助!

    【讨论】:

    • 如果您使用的是 UINavigationController,则所有其他方法都可以使用,因为它将在内部处理其 UINavigationBar 的 navigationItem 推送/弹出。如果您在没有控制器的情况下使用 UINavigationBar,则必须自己执行此操作。
    【解决方案4】:
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] init]; 
    self.navigationItem.leftBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    self.navigationItem.leftBarButtonItem = addButton;
    self.navigationItem.leftBarButtonItem.enabled = YES;
    

    【讨论】:

    • 不,先生,还没明白..我在 modalView 中添加了这个栏。(如果它与普通的有任何区别。)
    【解决方案5】:

    对于某些视图,leftBarButtonItem 不起作用,您需要使用 backBarButtonItem。试试这个:

    - (void)viewDidLoad { 
        [self.navigationItem setBackBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)] autorelease];
        // Or, if that doesnt work for some reason use:
        // [self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)] autorelease];
        [super viewDidLoad];
    }
    

    此外,您在viewDidLoad 范围内创建了一个名为addButton 的变量,但随后您尝试将属性self.addButton 设置为leftBarButtonItem

    要么从self.addButton 中删除self.

    [self.navigationItem setLeftBarButtonItem:self.addButton]; 
    

    或者初始化属性而不是创建一个同名的新项目:

    self.addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    // instead of:
    // UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多