以编程方式将 leftBarButtonItem 添加到应用程序

Posted

技术标签:

【中文标题】以编程方式将 leftBarButtonItem 添加到应用程序【英文标题】:Adding leftBarButtonItem programmatically to the app 【发布时间】:2013-01-28 18:29:19 【问题描述】:

我正在尝试将 leftBarButtonItem 添加到我的 iPhone 应用程序中。我有导航控制器,里面有 TableViewController。 我在我的 AppDelegate.m 文件中编码以下行。

self.viewCon = [[UITableViewController alloc]init];
    self.navCon = [[UINavigationController alloc]initWithRootViewController:self.viewCon];


  self.viewCon.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] 
initWithTitle:@"Second View"  style:UIBarButtonItemStyleBordered target:self action:@selector(push)]autorelease];

导航项未出现在屏幕上。桌子上。可能是什么问题? 顺便说一句,没有 ARC 或故事板。

【问题讨论】:

[self.navCon setNavigationBarHidden:NO animated:YES] 也许? 究竟什么没有出现?整个导航栏还是按钮本身? 没有按钮也没有导航栏。 【参考方案1】:

我假设您想要一个顶部带有 NavigationController 的 TableView,在这种情况下,您的根视图控制器将是您的导航控制器,而不是您的 tableview。如果你在 IB 中正确构建了应用程序(因为我看不到你做了什么,所以在黑暗中刺伤),那么你不应该初始化你的导航控制器。如果是这种情况,那么它应该很简单

self.viewCon.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Second View"  style:UIBarButtonItemStyleBordered target:self action:@selector(push)]autorelease];

我认为正在发生的事情是你正在用你的程序初始化覆盖你当前设置的 NavController,这导致一切都消失了。

如果是这种情况并且您可能已经尝试过,请发回错误和您的 IB 设置的屏幕截图。

【讨论】:

【参考方案2】:

试试这个:

UIBarButtonItem *bbi = [[[UIBarButtonItem alloc] initWithTitle:@"Second View" style:UIBarButtonItemStyleBordered target:self action:@selector(push)]autorelease];
[self.navigationItem setLeftBarButtonItem:bbi];

【讨论】:

我在某处读到它必须是 rootViewController。无论如何,我按照你的建议做了,但对此没有影响。 如果我添加您建议的内容,它将无法编译。如果我添加 self.viewCon 或 self.navView.. 它会导致运行时间错误 首先,据我所知,我需要将这些行放在 ViewController.m 文件中【参考方案3】:
[self.navigationController setNavigationBarHidden:NO];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setFrame:CGRectMake(0, 0, 49,32)];
        [ backButton setBackgroundImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
        [backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *back = [[UIBarButtonItem alloc]initWithCustomView:backButton];
        self.navigationItem.leftBarButtonItem = back;
        [back release];

【讨论】:

这段代码应该解决什么问题?你认为另一个栏按钮会起作用吗?您没有提供任何描述。 您将在您的视图控制器中添加此代码,它会工作 我确定他不想在那里显示UIButton。我确信在UIBarButtonItem 中使用UIButton 并不能解决他的问题。

以上是关于以编程方式将 leftBarButtonItem 添加到应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义 UIButton 不能用于替换 leftBarButtonItem

如何使用 Swift 以编程方式分配 IBOutlet?

无法更改 UIBarButtonItem

将 leftBarButtonItem 添加到导航栏的问题

如何设置leftBarButtonItem左对齐

Objective c - UIActivityViewController 和 navigationItem.leftBarButtonItem 的组合