0

UINavigationController에 UITableViewController가 내장되어 있습니다.Dimissing TableViewController가 첫 번째 스토리 보드로 되감습니다.

자세히보기 (자세히보기가 UITabViewController에 있음)에서 버튼을 클릭하면 showList으로 List라는 UITableViewController (목록 테이블보기)가 표시됩니다. 나는 대리자 메서드 didSelectFromListdidSelectRowAtIndexPath에서 호출되는 목록 항목을 선택하면 블루 라인

로 표시 상세보기 : 나는 네비게이션 컨트롤러에 Back 버튼을 클릭하면 , 나는 올바른 화면을 다시 촬영하고있다 응용 프로그램은 빨간색 선으로 표시된 주 화면 (홈보기)으로 다시 이동합니다.

내가 원하는 것은 보라색 선입니다.

enter image description here

어떤 도움 ?

시도 1 :

나는 대리인이 목록 TableVC을 기각 할 수 있습니다. 목록 테이블 뷰 컨트롤러

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

    ///.. stuff to find the correct string 

    [self.delegate didSelectFromList:item]; 


} 

시도 2에서

#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); 
    }]; 
} 

: 여기

나는 목록 TableVC 자체를 dimiss 수 있습니다. , 그들이 얻을 당신이보기 컨트롤러를 밀어 계속하는 경우 LIST 테이블 뷰 컨트롤러

#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

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

    }]; 
+1

detailVC에서 nav 컨트롤러를 푸는 대신 목록 테이블 VC가있는 nav 컨트롤러를 제공하십시오. 이 경우 [self.nav dismissviewCOntroller가 작동합니다. –

+0

정답입니다. 나는 그것을 발표하는 대신 목록을 밀고 있었다. –

답변

2

에 didSelectRowAtIndexPath에서 시도 네비게이션 스택에 추가되므로 [self dismiss 또는 [self.navigationController dismiss]를 수행하면 모든 네비게이션 스택이 지워지고 rootViewController에게 가져옵니다.

하나의보기 컨트롤러를 팝업하거나 내비게이션 컨트롤러를 detailVC에서 푸는 대신 목록 테이블 VC가있는 탐색 컨트롤러를 표시하십시오. 이 경우 [self.nav dismissviewCOntroller이 작동합니다.