为什么我能做到这一点而不是另一个?

时间:2013-08-15 07:48:53

标签: objective-c uibarbuttonitem uinavigationitem

说我希望后退按钮保持@"Back"而不是UIViewController的标题

这样可行

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

这是一个更明智的选择

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

但事实并非如此。

为什么?

2 个答案:

答案 0 :(得分:5)

self.navigationItem.backBarButtonItem的默认值为nil(调用nil object上的任何函数都不会执行任何操作。)

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

答案 1 :(得分:2)

最初self.navigationItem.backBarButtonItem相当于UIBarButtonItem *backBarButtonItem = nil,因此只需调用self.navigationItem.backBarButtonItem.title = @"Back";即表示您设置的UIBarButtonItem标题不存在。您实际上从未将对象分配给self.navigationItem.backBarButtonItem。此外self.navigationItem.backBarButtonItem相当于[[self navigationItem] setBackBarButtonItem:(UIBarButtonItem)];,因此将@"Back"传递给此将无法正常工作,这样做实际上会产生我相信的警告。您应该无法将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];

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