我有一个扩展UIViewController功能的类别,它将自己的副标题添加到标题栏。它需要知道标题栏中存在哪些按钮,以便它可以调整其中的标签。我可以检测是否存在leftBarButtonItem和rightBarButtonItem,但是当涉及到一个backBarButtonItem时,我尝试过的所有内容都告诉我没有后退按钮,实际上当视图加载时有一个。这就是我以前测试过的:
if(self.parentViewController.navigationItem.backBarButtonItem == nil){
NSLog(@"no back button");
}
else {
NSLog(@"has back button");
}
if(self.parentViewController.navigationController.navigationItem.backBarButtonItem == nil){
NSLog(@"1no back button");
}
else {
NSLog(@"1has back button");
}
if(self.navigationItem.backBarButtonItem == nil){
NSLog(@"2no back button");
}
else {
NSLog(@"2has back button");
}
if(self.navigationController.navigationItem.backBarButtonItem == nil){
NSLog(@"3no back button");
}
else {
NSLog(@"3has back button");
}
if(self.presentingViewController.navigationItem.backBarButtonItem == nil){
NSLog(@"4no back button");
}
else {
NSLog(@"4has back button");
}
if(self.presentingViewController.navigationController.navigationItem.backBarButtonItem == nil){
NSLog(@"5no back button");
}
else {
NSLog(@"5has back button");
}
if(self.presentedViewController.navigationItem.backBarButtonItem == nil){
NSLog(@"6no back button");
}
else {
NSLog(@"6has back button");
}
if(self.presentedViewController.navigationController.navigationItem.backBarButtonItem == nil){
NSLog(@"7no back button");
}
else {
NSLog(@"7has back button");
}
我已经尝试将它放在viewDidLoad,viewWillAppear和viewDidAppear中,并且它们都返回没有后退按钮。在上一个视图中,我使用self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
手动设置后退按钮(后退按钮必须说回而不是之前的视图标题)。从逻辑上讲,这意味着self.parentViewController应该告诉我这个视图上是否有后退按钮,但显然不是。
答案 0 :(得分:1)
如果当前情况为真并且您希望返回按钮说“返回”,则可以遍历寻找该按钮的子视图。
BOOL exists = NO;
for (UIView *view in [self.view subviews]) {
if ([view isMemberOfClass [UIButton class]]) {
if([view.title isEqualToString: @"Back"]){
exists = YES;
}
}
}
if(!exists){
//Add back button
}