[ios] 프로그래밍 방식으로 segue 만들기

나는 UIViewController모든 UIViewsControllers공통된 작업을 재사용하기 위해 확장한다는 공통점이 있습니다.

나는이 “공통”에 UIViewController대해 다른 모든 것이 UIViewControllers상속 되도록 세구를 설정하고 싶다 .

프로그래밍 방식으로 어떻게해야합니까?

질문은 스토리 보드에 가지 않고 손으로 직접하지 않고 어떻게 segue모두를 위해 어떻게 설정할 수있을 것 같아요 UIViewControllers.



답변

정의상 segue는 스토리 보드와 독립적으로 존재할 수 없습니다. 클래스 이름에도 있습니다 UIStoryboardSegue. 프로그래밍 방식으로 segue를 만들지 마십시오. 스토리 보드 런타임이 만들어집니다. 일반적으로 performSegueWithIdentifier:뷰 컨트롤러의 코드를 호출 할 수 있지만 스토리 보드에 이미 참조 용 segue가 설정되어 있어야합니다.

내가 생각하는 것은 공통 뷰 컨트롤러 (기본 클래스)에서 새 뷰 컨트롤러로 전환하고 모든 파생 클래스에서 상속되는 메서드를 만드는 방법입니다. 기본 클래스 뷰 컨트롤러에 이와 같은 메소드를 작성하여이를 수행 할 수 있습니다.

- (IBAction)pushMyNewViewController
{
    MyNewViewController *myNewVC = [[MyNewViewController alloc] init];

    // do any setup you need for myNewVC

    [self presentModalViewController:myNewVC animated:YES];
}

그런 다음 파생 클래스에서 적절한 버튼을 클릭하거나 테이블 행을 선택하거나 그 밖의 것을 선택하면 해당 메소드를 호출하십시오.


답변

나는 또 다른 가능성을 추가 할 것이라고 생각했다. 수행 할 수있는 작업 중 하나는 액션에 연결되지 않은 segue를 사용하여 스토리 보드에서 두 장면을 연결 한 다음 뷰 컨트롤러 내에서 segue를 프로그래밍 방식으로 트리거 할 수 있다는 것입니다. 이렇게하는 방법은 스토리 장면의 맨 아래에있는 파일의 소유자 아이콘에서 segueing scene 인 드래그하여 대상 장면으로 마우스를 끌어 야한다는 것입니다. 설명을 돕기 위해 이미지를 던질 것입니다.

여기에 이미지 설명을 입력하십시오

“Manual Segue”팝업이 나타납니다. 유형으로 푸시를 선택했습니다. 작은 사각형을 탭하고 속성 관리자에 있는지 확인하십시오. 코드에서 참조 할 때 사용할 식별자를 제공하십시오.

여기에 이미지 설명을 입력하십시오

좋아, 다음은 프로그래밍 방식의 바 버튼 항목을 사용하여 정리하겠습니다. viewDidLoad 또는 다른 곳에서 탐색 코드에 다음 코드를 사용하여 버튼 항목을 만듭니다.

UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
                                                                    style:UIBarButtonItemStyleDone
                                                                   target:self
                                                                   action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];

좋아, 선택기는 buttonizeButtonTap :입니다. 따라서 해당 버튼에 대해 void 메소드를 작성하고 해당 메소드 내에서 다음과 같이 segue를 호출합니다.

-(void)buttonizeButtonTap:(id)sender{
    [self performSegueWithIdentifier:@"Associate" sender:sender];
    }

prepareForSegue가 호출 될 때 버튼을 식별하려면 sender 매개 변수가 필요합니다. PreparingForSegue는 장면을 인스턴스화하고 작업에 필요한 값을 전달하는 프레임 워크 방법입니다. 내 방법은 다음과 같습니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"Associate"])
    {
        TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
        translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
        translationQuizAssociateVC.contentID = self.contentID;
        translationQuizAssociateVC.index = self.index;
        translationQuizAssociateVC.content = self.content;
    }
}

좋아, 방금 테스트했고 작동합니다. 그것이 당신을 돕기를 바랍니다.


답변

이 코드를 사용하여 사용자 정의 segue 서브 클래스를 인스턴스화하고 프로그래밍 방식으로 실행했습니다. 작동하는 것 같습니다. 이것에 문제가 있습니까? 나는 할 수 없다는 다른 모든 답변을 읽고 의아해합니다.

UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];


답변

이 답변에 동의하고 추측하지만 몇 가지 세부 정보를 추가하고 싶습니다.

로그인 화면을 첫 번째 화면으로 표시하고 로그인이 올바른 경우 응용 프로그램을 보려고하는 문제를 해결하기 위해 수행 한 작업. login-view controller에서 root view controller까지 segue를 생성하고 “myidentifier”와 같은 식별자를 부여했습니다.

그런 다음 모든 로그인 코드를 확인한 후 로그인이 올바른지 확인하십시오.

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

내 가장 큰 오해는 내가 segue를 버튼에 넣고 segue가 발견되면 방해하는 것입니다.


답변

UIStoryboard사용중인 코드를 코드에 연결해야합니다 . 에서 YourViewController 로 이동하고 UIStoryboard주위의 테두리를 클릭 한 다음 해당 identifier필드를 NSString코드에서 호출 하는 필드로 설정 하십시오.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                     bundle:nil];
YourViewController *yourViewController =
 (YourViewController *)
  [storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];


답변

스토리 보드에있는 컨트롤러 용.

jhilgert00이 찾고 계십니까?

-(IBAction)nav_goHome:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
[self.navigationController pushViewController: myController animated:YES];

}

또는…

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


답변

UIStoryBoardSegue를 만들고 서브 클래 싱 할 수도 있습니다. 서브 클래 싱은 주로 사용자 정의 전환 애니메이션을 제공하는 데 사용됩니다.

StoryBoard를 소개하는 wwdc 2011의 비디오를 볼 수 있습니다. 유튜브에서도 사용할 수 있습니다.

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue