완료 : - 내 응용 프로그램에서 How do I set up a simple delegate to communicate between two view controllers?내가 설정에 로그인 시퀀스에 대한 대리자를이 질문을 따르도록 노력하고
내가 메인보기 (MESHomeViewController)가 있습니다.
- MESLoginNavController
- 을 MESWelcomeViewController
- 의 루트 뷰 컨트롤러 스택으로 푸시 할 수도 MESLoginViewController 및 MESSignupViewControllers가있다 : 다음 는 또한 로그인 구조를 갖는다.
내 목표는 오직 호출되는 대리자 메서드를 가질 때 뷰가 종종/다시로드 다른 경우에 표시됩니다으로 내가 볼 필요가 그래서 내가있는 viewDidLoad를 사용할 수있다. 내가 대리자를 사용하고 사용자가 로그인 사용자가 로그인을 완료하면
사용자는 환영 컨트롤러 (페이스 북을 통한) 또는 로그인 컨트롤러 (정상적인 방법을 통한) 및 가입 (등록을 통한)을 통해 로그인 할 수 있습니다. MESHomeViewController.h
#import "MESWelcomeViewController.h"
@interface MESHomeViewController : UIViewController <LoginViewControllerDelegate>
@end
을 사용자가 로그인하면 내가 확인 MESHomeViewController.m, 그들은 다음 완료되지 않은 경우 :
이
내가 아래에 구현하기 위해 노력했다 것입니다 : 나는 다음과 같은 한 MESWelcomeViewController.h에서NSLog(@"not logged in");
MESWelcomeViewController *loginNavVC = [self.storyboard instantiateViewControllerWithIdentifier:@"WelcomeVC"];
loginNavVC.delegate = self;
[self presentModalViewController:loginNavVC animated:NO];
:
@protocol LoginViewControllerDelegate;
@interface MESWelcomeViewController : UIViewController <NSURLConnectionDataDelegate>
@property (nonatomic, weak) id<LoginViewControllerDelegate> delegate;
@end
@protocol LoginViewControllerDelegate <NSObject>
- (void)didLoginUser;
@end
일단 사용자가 사용자 정의 방법을 통해 완전히 로그인하면. 그러나 사용자가
NSLog(@"%@",self.delegate);
if ([self.delegate respondsToSelector:@selector(didLoginUser)]) {
[self.delegate didLoginUser];
}
기록 MESWelcomeViewController.m되면 위임 방법 그것은 self.delegate가 welcomeViewController 대한 NULL이 나타나고 호출되는 것은 아니다. 아마도 위의 설정을 기반으로 로그인 탐색 컨트롤러로 대리자를 설정해야한다고 생각하지만 현재 nav에 푸시 된보기 컨트롤러에서 대리자 메서드를 호출하는 방법을 모르겠습니다.
감사합니다, 귀하의 초기화를 사용하려고했지만 NSLog (로그인 완료 블록 내에서) self.delegate 때 나는 여전히 (null)을 얻고 있습니까? 로그인은 다음과 같이 푸시됩니다. '[self presentModalViewController : [self.storyboard instantiateViewControllerWithIdentifier : @ "WelcomeVC"] animated : NO]; ''이 명령은 스토리 보드에서 LoginNavController (시작 컨트롤러를 루트로 사용)를 가리키는 식별자를 푸시합니다. 이 방식으로 모달을 표현하는 동안 두 번째 점을 구현하는 방법을 잘 모르겠습니다. – StuartM
사실 초기화 기능을 호출하지 않는 MESWelcomeViewController에 해당 init 함수를 추가하면 사실 은요? 맞습니까? – StuartM
내가 제공 한 init 함수는 자동으로 호출되지 않으므로 기본 이니셜 라이저 대신 명시 적으로 호출해야합니다. 스토리 보드를 사용하는 경우 대리자 속성을 설정하는 대안을 사용해야합니다.이전에는 스토리 보드를 사용한 적이 없지만 다음과 같이 할 수 있습니다. MESWelcomeViewController * welcomeView = [self.storyboard instantiateViewControllerWithIdentifier : @ "WelcomeVC"]; [welcomeView setDelegate : self]; [self presentModalViewController : welcomeView animated : 아니요]; – Doc