Bur*_*ron 2 push objective-c ios backbarbuttonitem
我有根 ViewController和详细的 ViewController.当我推送到detailedViewController时,我得到leftBarButtonItem,其中包含来自root的标题.但我希望标题只是"后退",仅此而已.那怎么办呢?
这没有用
self.navigationItem.leftBarButtonItem.title = @"Back";
Run Code Online (Sandbox Code Playgroud)
要创建我的on类型barButtonItem(例如104左箭头)并将其设置为leftBarButtonItem是一个糟糕的决定.
除了在推送之前手动更改rootViewController的标题之外还有其他方法吗?
来自Apple的文档:
backBarButtonItem
导航栏上需要后退按钮时使用的条形按钮项.
@property(nonatomic,retain)UIBarButtonItem*backBarButtonItem讨论
当此导航项位于堆栈顶部项目的正下方时,导航控制器将从此导航项目中导出导航栏的后退按钮.当此属性为nil时,导航项使用其title属性中的值来创建适当的后退按钮.如果要为后退按钮指定自定义图像或标题,则可以将自定义栏按钮项(使用自定义标题或图像)指定给此属性.配置条形按钮项时,不要为其指定自定义视图; 无论如何,导航项忽略后栏按钮中的自定义视图.
因此,您可以创建创建barButtonItem(例如– initWithTitle:style:target:action:)并将其分配给该属性.
此外,如果您想要UIBarButtonItem(左或右)拥有自定义图像,我建议您创建类似如下的类别扩展:
//UIBarButtonItem+Extension.h
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action;
//UIBarButtonItem+Extension.m
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setBackgroundImage:image forState:UIControlStateNormal];
[button setTitle:title forState:UIControlStateNormal];
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
return [barButtonItem autorelease];
}
Run Code Online (Sandbox Code Playgroud)
然后用它作为
UIBarButtonItem* backBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"YoutImageName"] title:@"YourTitle" target:self action:@selector(doSomething:)];
Run Code Online (Sandbox Code Playgroud)
我终于找到了今天所有的皱纹,而且比上面更简单.
子项的后退按钮文本基于其父项中设置的值.当您考虑它时,这是显而易见的行为:如果可以从两个父节点到达视图控制器,则后退按钮的文本应该取决于推动它的位置.
如果文本总是相同的:
就像那样你已经完成了.当此视图控制器被新视图控制器推到一边时,该新视图控制器将此文本作为其标题.
如果文本是动态的:
self.navigationItem.backBarButtonItem.title = dynamicText;而且,你又完成了.
要清楚,您可以随时在父视图控制器中进行设置.只有在按下另一个视图控制器时才会显示它.
如果未将文本放在设计器的后退按钮中,则实例化视图控制器的过程将不会创建self.navigationItem.backBarButtonItem,并且您无法设置nil对象的标题.我相信这是围绕这一切的所有困惑所在.
当然,您可以在运行时创建它,但如果您已经在storyboard/nib中完成了大部分工作,那么让解码器更容易为您完成.
如果你对此更加好奇,我也写了一篇关于这个主题的博客文章.它有更多细节.