5

タイトル バーに独自のサブタイトルを追加する 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 が、このビューに戻るボタンがあるかどうかを教えてくれるはずですが、明らかにそうではないことを意味します。

4

1 に答える 1

1

現在のシナリオが true で、戻るボタンに「戻る」と表示されることを期待している場合は、そのボタンを探してサブビューをトラバースできます。

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
}

ここに画像の説明を入力

于 2012-12-10T13:26:11.423 に答える