IT박스

뷰 컨트롤러에서 자체로 스토리 보드 Segue

itboxs 2020. 10. 21. 07:49
반응형

뷰 컨트롤러에서 자체로 스토리 보드 Segue


파일 / 폴더 목록을 드릴 다운하는 메커니즘을 만들려고합니다. 사용자가 폴더를 선택할 때마다 동일한 파일 목록보기 컨트롤러를 표시하고 파일을 선택하면 파일 상세보기 컨트롤러를 표시하는 것이 아이디어입니다.

지금까지 파일 목록보기 컨트롤러에서 파일 세부 사항보기 컨트롤러로, 파일 목록 테이블보기 셀에서 파일 목록 테이블보기 컨트롤러로 segue를 작성했습니다.

여기에 이미지 설명 입력

이 문제는 사용자가 셀을 탭하자마자 segue가 실행된다는 것입니다. 테이블 뷰 셀에서 segue를 제거하고 파일 목록 뷰 컨트롤러에서 자체로 만들고 싶습니다. 이렇게하면 사용자가 셀을 탭할 때 프로그래밍 방식으로 오른쪽 segue를 트리거 할 수 있습니다.

그래서, 내 질문은 : 인터페이스 빌더에서 뷰 컨트롤러에서 자체로 segue를 만들 수 있습니까?


팬텀 버튼을 사용하여 segue를 만드는 방법을 개발했습니다. 나는 그것이 당신의 문제를 해결할 것이라고 믿습니다. 여기 내 대답 에서 그것에 대해 읽을 수 있습니다 .


탐색 컨트롤러를 사용하는 경우 ViewController를 탐색 스택에 푸시해야합니다. 이 예에서는 스토리 보드 ID 설정에서 ViewController "VDI"라는 이름을 지정했습니다.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
[self.navigationController pushViewController:dest animated:YES];

NavigationController가 "뒤로"히스토리에 자신을 계속 추가하는 것을 원하지 않는 경우 스택을 추가하기 전에 이렇게 추가 할 수 있습니다.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:dest animated:YES];

Xcode 5를 사용하면 훨씬 더 간단한 솔루션이 있습니다.

  1. 스토리 보드에서 표 셀을 클릭합니다.
  2. Connections Inspector를 엽니 다 (오른쪽 상단의 오른쪽 화살표 아이콘).
  3. "트리거 된 세그먼트"아래에 "선택"이 표시됩니다.
  4. "선택"옆의 원에서 스토리 보드의 셀로 드래그

그게 다야.


동일한 컨트롤러에 대해 segue를 수행하는 대신 스토리 보드에서 뷰 컨트롤러 (동일한 컨트롤러)를 인스턴스화 한 다음 탐색 컨트롤러로 푸시 할 수 있습니다.


인터페이스 빌더 접근 방식 : 프레젠테이션 뷰 컨트롤러를 다시 참조하는 스토리 보드 참조로 이동합니다.


IOS 6 에는 팬텀 버튼을 사용하는 것보다 더 깨끗한 솔루션 이 있습니다. 여전히 테이블 셀에서 뷰 컨트롤러로의 segue를 정의 할 수 있으며, 자동으로 트리거 된 segue를 취소하기 위해 보낸 사람을 볼 수 있습니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //storyboards should use segues and override prepareForSegue instead
    //but here we need custom logic to determine which segue to use
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if (item meets condition) {
        [self performSegueWithIdentifier:@"segue1" sender:self];
    } else {
        [self performSegueWithIdentifier:@"segue2" sender:self];
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath
    return (sender == self);
}

정답은 자신을 segue하려는 UIViewController를 참조하는 Storyboard Reference를 사용하고 segue를 가리키는 것입니다.

여기에 이미지 설명 입력


다음은 segue를 정의하거나 자체 식별자를 하드 코딩하지 않고 현재 뷰 컨트롤러의 다른 인스턴스를 푸시하는 방법입니다.

SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier];
[self.navigationController pushViewController: same animated: YES];

복원 ID를 스토리 보드 ID와 동일하게 설정하기 만하면됩니다 (IB에 해당 확인란이 있음).

복원 ID


도움이 되었기를 바랍니다.

여러 개의 프로토 타입 셀을 만들 수 있음을 발견했습니다.

스토리 보드의 모든 셀을 다른보기에 연결할 수 있습니다.

이 같은:

NSString *CellIdentifier = @"Cell"; 
if (Condition2 ){
CellIdentifier = @"Cell2"; } 
if (Condition3 ){
CellIdentifier = @"Cell3"; }

참고 URL : https://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself

반응형