0

假设我希望保留后退按钮@"Back"而不是标题UIViewController

这会起作用

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];

一个更明智的选择是

self.navigationItem.backBarButtonItem.title = @"Back";

然而事实并非如此。

为什么?

4

2 回答 2

5

self.navigationItem.backBarButtonItem 的默认值是nil(并且调用任何函数nil object都不会做任何事情)。

你必须先用对象初始化它。

于 2013-08-15T08:04:16.140 回答
2

最初self.navigationItem.backBarButtonItem相当于UIBarButtonItem *backBarButtonItem = nil所以只是调用self.navigationItem.backBarButtonItem.title = @"Back";意味着您正在设置UIBarButtonItem不存在的标题。您从未真正将对象分配给self.navigationItem.backBarButtonItem. 也self.navigationItem.backBarButtonItem相当于[[self navigationItem] setBackBarButtonItem:(UIBarButtonItem)];因此传入@"Back"this 不起作用,这样做实际上会产生我相信的警告。您不应该能够将 a 传递给NSString *应该采用 的参数UIBarButtonItem *

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];基本上相当于UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];

老实说,我会说这样做就像

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backBarButtonItem];

这会更好,更容易理解,但这只是我的意见。只记得先初始化对象。

于 2013-08-15T08:23:12.057 回答