2011-11-19 5 views
12

Xcode의 스토리 보드 기능을 사용하여 iOS 앱을 디자인하고 있습니다. 이 앱에는 사용자 이름과 비밀번호가 필요하며 로그인 버튼이있는 로그인 화면이 있습니다. 로그인 버튼을 누르면 다른보기 컨트롤러로 밀어 넣을 수 있습니다. 그러나 다음보기 컨트롤러로 진행하기 전에 로그인이 성공할 때까지 기다려야합니다.iOS : 로그인 성공을 위해 대기 시간을 줄입니다.

prepareForSegue:sender:에 대해 알고 있지만 내 문제는 heres입니다. 로그인 호출이 비동기입니다. 따라서 거기에 로그인을 수행 할 수 없습니다.

여기 주변에 있나요? 스토리 보드에서 버튼을 클릭했을 때와 반대로 원할 때만 트리거 할 수 있습니까?

답변

37

좋아, 알아 냈어. 나는 UIButton에서 다음 UIViewController까지 segue를 정의했습니다. 이 방법으로 정의 된 것처럼 조건부로 segue를 실행할 방법이 없습니다.

버튼에 segue를 두는 대신 첫 번째 UIViewController부터 UIViewController까지 segue를 만들었습니다. 이는 segue를 정의하지만 아무 동작도 연관시키지 않습니다. 거기서 나는 그 segue가 실행되기를 원할 때 performSegueWithIdentifier:sender:라고 부를 수 있습니다. (제 경우에는 비동기 작업이 완료되었을 때입니다).

나를위한 주요 장점은 IB가 구조를 유지한다는 것입니다.

나를 올바른 방향 (+1)으로 가리키기 위해 @cli_hlt에게 큰 감사를드립니다.

5

(난 강력하게 그것을 의심하지만) 이러한 작업을 수행 할 수있는 IB의 방법이 있는지 나도 몰라 내가보기 컨트롤러에

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

를 사용하는 것이 좋습니다 때 비동기 로그인 신호 성공 .

+0

그래, 나는 IB에서 그 흐름을 깰 필요가없는 곳에서 그것을 할 수있는 방법이 있기를 바랐다. – mtmurdock

1

UIStoryBoard 인스턴스에서 instantiateViewControllerWithIdentifier를 호출 할 수도 있습니다. 이렇게하면 스토리 보드의 모든 지점에 대한보기 컨트롤러 참조가 반환됩니다. 거기에서 당신이 원하는대로 그것을 발표 할 수 있으며 그것은 스토리 보드의 흐름을 선택합니다.

+0

그건 IB에 나타나지 않을거야. 스토리 보드에서 순서도를 유지하려고했습니다. IB에서 두 컨트롤러 사이에 링크가 표시되지 않도록 제안하는 것입니다. 내 대답을 읽으면 IB를 사용하여 segue를 정의하면서 본질적으로 제안한 것과 동일한 작업을 수행 할 수있었습니다. 의견을 보내 주셔서 감사합니다! +1 – mtmurdock