我有一个扩展 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");
}
Run Code Online (Sandbox Code Playgroud)
我试过把它放在 viewDidLoad、viewWillAppear 和 viewDidAppear 中,它们都返回没有后退按钮。在上一个视图中,我确实使用手动设置了后退按钮self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];(后退按钮必须说后退而不是前一个视图标题)。从逻辑上讲,这意味着 self.parentViewController 应该告诉我此视图上是否有后退按钮,但显然没有。
如果当前情况成立并且您期望后退按钮说“后退”,您可以遍历子视图寻找该按钮。
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
}
Run Code Online (Sandbox Code Playgroud)
