objective-c - 如何检测 UIViewController 是否有后退按钮

标签 objective-c ios

我有一个扩展 UIViewController 功能的类别,它可以将自己的副标题添加到标题栏。它需要知道标题栏中有哪些按钮,以便它可以调整其中标签的大小。我可以检测是否有 leftBarButtonItem 和 rightBarButtonItem,但是当涉及到 backBarButtonItem 时,我尝试的所有内容都告诉我没有后退按钮,而实际上在加载 View 时有一个。这是我用来测试的:

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 中,它们都返回没有后退按钮。在之前的 View 中,我确实使用 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back"style:UIBarButtonItemStyleBordered target:nil action:nil]; 手动设置后退按钮(后面按钮必须说回来而不是以前的 View 标题)。从逻辑上讲,这意味着 self.parentViewController 应该告诉我此 View 上是否有后退按钮,但显然没有。

最佳答案

如果当前情况属实,并且您希望后退按钮说“后退”,您可以遍历 subview 寻找该按钮。

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
}

enter image description here

关于objective-c - 如何检测 UIViewController 是否有后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13801647/

相关文章:

ios - 如何在广播上传扩展(iOS)中实现上传?

ios - MKMapView 防止注解分组

iphone - eventkit 并从应用程序将事件添加到日历中

ios - RLM 结果 :allObjects crash (iOS Objective-C)

ios - 动画调整 UIView 和 subview 大小的更好方法?

c++ - 以度而不是弧度计算三角函数

ios - 如何使用 NSPredicate 过滤数组中的多个值?

ios - 如何在 Swift 中创建自定义 UIControl 事件?

ios - 添加按钮以查看以编程方式创建

iphone - iOS 如何检查当前是否正在通话