0

私はUINavigationControllerに埋め込まれたUITableViewControllerを持っています。DimViewing TableViewControllerを最初のストーリーボードに巻き戻します

showListに詳細ビュー(詳細ビューがUITabViewControllerにある)をクリックすると、ListというUITableViewController(リストテーブルビュー)が表示されます。私は、デリゲートメソッドdidSelectFromListdidSelectRowAtIndexPathから呼び出されたリスト項目を選択した場合はブルーライン

で示される詳細ビュー:私はナビゲーションコントローラにBackボタンをクリックした場合 、私は正しい画面をバック取られていますアプリはメイン画面(ホームビュー)に戻り、 の赤い線で表示されます。

私がしたいのは紫色の線です。

enter image description here

任意のヘルプ?

試み1:

私は、デリゲートが一覧TableVCを閉じてみましょう。

#import "ListTableViewController.h" 
@interface CallDetailViewController() <ListTableViewControllerDelegate> 
@property (nonatomic, strong) LotListTableViewController * lltvc; 
@end 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([[segue identifier] isEqualToString:@"segue_list"]) { 
     self.lltvc = (ListTableViewController*)segue.destinationViewController; 
     self.lltvc.delegate = self; 
    } 

} 

- (void) showList { 
    [self performSegueWithIdentifier:@"segue_list" sender:self]; 
} 

#pragma mark LIST SELECTION DELEGATE METHOD 

- (void) didSelectFromList:(NSString *)item { 
    [self.lltvc dismissViewControllerAnimated:YES completion:^{ 
     NSLog(@"Did Select item: %@", item); 
    }]; 
} 

リストテーブルビューコントローラで

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    ///.. stuff to find the correct string 

    [self.delegate didSelectFromList:item]; 


} 

試み2:ここでは

私はリストTableVCが自分自身をdimissてみましょう。

#import "ListTableViewController.h" 
@interface CallDetailViewController() <ListTableViewControllerDelegate> 

@end 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([[segue identifier] isEqualToString:@"segue_lots"]) { 
     NSLog(@"GOING TO THE LOT LIST"); 

     UINavigationController * nvc = (UINavigationController*)segue.destinationViewController; 
     LotListTableViewController *lltvc = [nvc childViewControllers][0]; 
     lltvc.delegate = self; 

    } 

} 

- (void) showLotList { 
    [self performSegueWithIdentifier:@"segue_lots" sender:self]; 

} 
#pragma mark LIST SELECTION DELEGATE METHOD 

- (void) didSelectFromList:(NSString *)item { 
     NSLog(@"Did Select item: %@", item); 

} 

リストテーブルビューコントローラで

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    ///.. stuff to find the correct string 

    [self dismissViewControllerAnimated:YES completion:^{ 
     [self.delegate didSelectFromList:item]; 

    }]; 
} 

私はまた、あなたがビューコントローラをプッシュし続けるならば、彼らが得る一覧TableVCにdidSelectRowAtIndexPathから

[self.navigationController dismissViewControllerAnimated:YES completion:^{ 
     [self.delegate didSelectFromList:item]; 

    }]; 
+1

詳細VCからnavコントローラを押すのではなく、リストテーブルVCを持つnavコントローラを表示します。その場合、[self.nav dismissviewCOntrollerは動作します、 –

+0

これは正しい答えです。私はプレゼンテーションの代わりにリストを押していた。 –

答えて

2

を試してみましたナビゲーションスタックに追加されるので、[self dismissまたは[self.navigationController dismiss]を実行すると、すべてのナビゲーションスタックがクリアされ、あなたはrootViewControllerに渡されます。

1つのView Controllerをポップするか、または detailVCからナビゲーションコントローラを押すのではなく、リストテーブルVCを持つナビゲーションコントローラを表示します。その場合、[self.nav dismissviewCOntrollerが動作します。

関連する問題