program tip

프로그래밍 방식으로 스토리 보드를 사용하여 뷰 컨트롤러를 푸시하는 다른 방법

radiobox 2020. 12. 26. 09:50
반응형

프로그래밍 방식으로 스토리 보드를 사용하여 뷰 컨트롤러를 푸시하는 다른 방법


프로그래밍 방식으로 스토리 보드에서 인스턴스화 된 뷰 컨트롤러를 푸시하는 다른 방법을 찾고 있습니다. 실제로 다음보기로 이동하는 데 사용하는 방법과 이전보기로 돌아가는 데 사용하는 두 가지 방법을 찾았습니다.

  1. 사용 pushViewController:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"];
    [self.navigationController pushViewController:lvc animated:YES];
    
  2. Segue프로그래밍 방식으로 수행 :

    [self performSegueWithIdentifier: @"SongSegue" sender: self];
    

대안과이 작업을 수행하는 가장 좋은 방법에 대한 힌트가 있습니까? 모달 뷰를 언급하는 것이 아닙니다.


Apple performSegueWithIdentifier:sender:someObject은를 사용 하여 프로그래밍 방식으로 segue를 수행 할 것을 권장 합니다. 이렇게하면 적어도 몇 가지 이점이 있습니다.

  • 자신의 코드가 적다는 것은 프레임 워크가 더 많은 작업을 수행하도록한다는 것을 의미합니다. Apple이 푸시 세그를위한 멋진 새 시각 효과를 내 놓거나 성능을 향상 시키거나 향후 iOS 릴리스에서 버그를 수정하면 앱에서 무료로 얻을 수 있습니다. 그리고 프레임 워크가 수행 할 수있는 작업을 수행하기 위해 작성하는 모든 코드 줄은 버그 작성 가능성을 높입니다.

  • IB많을수록 변경하기가 더 쉽습니다. 모든 푸시 세그를 모달 세그로 변경하거나 자신 만의 슈퍼 쿨한 시각 효과를하는 커스텀 세그 유형을 변경하기로 결정한 경우, IB에서 모두 선택하고 사냥 대신 한 번의 클릭으로 세그 유형을 변경할 수 있습니다. 코드에서.


또한 첫 번째 방법을 사용하든 두 번째 방법을 사용하든 이전보기 컨트롤러로 "돌아 가기 위해"보기 컨트롤러를 푸시하는 것은 사용자가 기대하는 방식으로 작동하지 않습니다. 를 푸시 SongViewController하면 탐색 스택 끝에 추가됩니다.

LocationViewController -> SongViewController

그런 다음 LocationViewController다시 밀어 "뒤로"이동하는 경우 :

LocationViewController -> SongViewController -> LocationViewController

사용자가 내비게이션 바에서 뒤로 버튼을 누르면 위치보기에서 노래보기로 다시 돌아가 위치보기로 돌아갑니다. (또한이 작업을 계속하면 모든 "뒤로"및 "앞으로"가 계속 증가하는 뷰 컨트롤러 체인에 추가되어 다른 문제가 발생할 수 있습니다.)

대신 내비게이션 컨트롤러가 뒤로 돌아가도록해야합니다. 대부분의 사용 사례를 처리 할 목적으로 탐색 모음에 버튼을 배치합니다. 돌아 가기 위해 자신의 컨트롤을 만들어야하는 경우 IB에서는 iOS 5를 사용할 수 없지만 내비게이션 컨트롤러의 popViewControllerAnimated:메서드를 사용하여 프로그래밍 방식으로 수행 할 수 있습니다 .


개인적으로 UINavigationController 아래에있는 UIViewController에있을 때 # 2를 사용합니다. UINavigationController가 없으면 작동하지 않을 것이라고 생각합니다.

UITabBarController 아래에있는보기를 사용할 때 다음 코드를 사용하여 다른 탭으로 전환합니다.

NSUInteger tabIndex = 2; // Index of the tab I want to select
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex];
_tabController.selectedViewController = viewCtrl;

참조 URL : https://stackoverflow.com/questions/9047146/alternative-ways-to-push-view-controllers-with-storyboard-programmatically

반응형