Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何检测UIViewController是否有后退按钮_Objective C_Ios - Fatal编程技术网

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

Objective c 如何检测UIViewController是否有后退按钮,objective-c,ios,Objective C,Ios,我有一个类别,它扩展了UIViewController的功能,将自己的字幕添加到标题栏。它需要知道标题栏中有哪些按钮,以便可以调整其中标签的大小。我可以检测是否存在LeftBarButtonim和RightBarButtonim,但是当涉及到BackBarButtonim时,我尝试过的一切都告诉我没有后退按钮,而事实上,当视图加载时有一个后退按钮。这是我用来测试的: if(self.parentViewController.navigationItem.backBarButtonItem ==

我有一个类别,它扩展了UIViewController的功能,将自己的字幕添加到标题栏。它需要知道标题栏中有哪些按钮,以便可以调整其中标签的大小。我可以检测是否存在LeftBarButtonim和RightBarButtonim,但是当涉及到BackBarButtonim时,我尝试过的一切都告诉我没有后退按钮,而事实上,当视图加载时有一个后退按钮。这是我用来测试的:

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、ViewWillDisplay和ViewDidDisplay中,它们都返回没有后退按钮的结果。在上一个视图中,我确实使用
self.navigationItem.BackBarButtonim=[[uiBarButtonim alloc]initWithTitle:@“back”样式:uiBarButtonimStyleBordered目标:nil操作: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
}

你能检查一下是否有“后退”按钮的子视图吗?@propstm可能会,但我希望尽可能保持它的通用性,后退按钮可能没有“后退”这个词在itI中。我曾经问过一个类似的问题,但措辞略有不同。然而,这些答案对我很有帮助。也许对你也有帮助。但是,没有一个解决方案会直接检查UI项本身。如果按一下按钮,这可能会起作用,但我希望在“后退”按钮中没有“后退”一词的情况下保持它的通用性。您可以记录self.navigationController或self.presentedvidviewcontroller.navigationController,只是为了好玩。我只是想确保我们没有遇到这个值为零的问题,我只是把你的代码放进去,第二个场景对我来说是可行的。将使用屏幕截图编辑我的响应。好的,我刚刚记录了它们,self.navigationController不是nil,但是self.presentedViewController.navigationController是nil。它看起来很好,这更近了一步,但问题是上一个视图设置了“返回当前视图”按钮(似乎没有任何其他方式工作,否则它仍然在“后退”按钮中显示标题,而不是“后退”),因此您需要从以前的视图中测试它