尝试以编程方式向UINavigationController添加一个按钮但它永远不会显示

时间:2011-02-21 03:48:13

标签: iphone objective-c ios uinavigationcontroller uibarbuttonitem

我以编程方式创建了一些UINavigationControllers并将它们添加到UITabBarController中。一切似乎工作正常,但我想在导航控制器中添加一个取消按钮,但它永远不会出现。我尝试了多种方法,但我似乎根本无法影响导航项目的显示,我从这里和其他网站上看到了多个例子,但没有任何反应。

MyTableViewController *mtvc = [[MyTableViewController alloc] init]; 
UINavigationController *myNavController = [[[UINavigationController alloc] initWithRootViewController:mtvc] autorelease];
myNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;  // this works
[mtvc release];

// TODO: figure out why added buttons aren't showing
UIBarButtonItem *closeButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(shutDown)] autorelease]; 
myNavController.navigationItem.leftBarButtonItem = closeButton;  // never shows up

我也尝试过这样添加按钮

[myNavController.navigationItem setLeftBarButtonItem:closeButton animated:NO];  // also doesn't do anything

我开始感到沮丧,所以我也尝试了其他一些事情,看看我是否可以影响任何事情,但无济于事

myNavController.title = @"test";  // does nothing

我已尝试在将导航控制器添加到UITabBarController之前和之后执行此操作并且没有帮助。 我也尝试过rightBarButtonItem并尝试使用initWithTitle:而不是initWithBarButtonSystemItem。

有人请照亮我吗?显然,我这样做是错误的。

3 个答案:

答案 0 :(得分:16)

尝试添加loadView MyTableViewController方法中的小节按钮,如下所示。

UIBarButtonItem *closeButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(shutDown)] autorelease]; 
self.navigationItem.leftBarButtonItem = closeButton;

我想这应该有用。

答案 1 :(得分:4)

您是否尝试过如下设置当前视图控制器导航项的按钮:

mtvc.navigationItem.leftBarButtonItem = closeButton;

答案 2 :(得分:2)

如果你需要在Swift 3.0中这样做,那很简单:

let closeButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel,
                        target: self,
                        action: #selector({Your-viewController}.{close-method}))
self.navigationItem.leftBarButtonItem = closeButton