hideViewControllerAnimated를 사용할 때 뷰를 다시 로드하는 방법
-
21-12-2019 - |
문제
누군가가 나에게 올바른 방향을 알려줄 수 있기를 바랍니다.
저는 2개의 컨트롤러, MasterViewController(많은 데이터 표시)와 LoginViewController(사용자를 로그인하고 해당 데이터 가져오기)를 가지고 있습니다.
MasterViewController는 루트 컨트롤러입니다.사용자가 로그인했는지 확인하기 위해 상단에 이 코드가 있습니다.로그인된 경우 loadView 메소드가 호출되고, 그렇지 않으면 로그인 뷰 컨트롤러로 이동됩니다.
- (void)viewDidLoad
{
[super viewDidLoad];
NSDictionary *session = [Global getSession];
if(!session){
// Not logged in.
LoginViewController *loginViewController = [LoginViewController alloc];
[self.navigationController presentViewController:loginViewController animated:YES completion:nil];
}else{
[self loadView];
}
}
로그인하면 다음 코드를 사용하여 MasterViewController로 다시 가져오는 코드가 있습니다.
[self dismissViewControllerAnimated:NO completion:nil];
문제는 MasterViewController가 전혀 로드되지 않는다는 것입니다.사용자가 보기로 다시 돌아오기 전에 전체 보기를 어떻게 다시 볼 수 있나요?
감사합니다, 피터
해결책
다양한 방법이 있습니다.
대리자를 사용하고 마스터 뷰 컨트롤러에서 'reloadData'라는 다시 로드 메서드를 선언합니다.로그인 뷰 컨트롤러를 표시하기 전에 마스터 뷰 컨트롤러를 loginSuccessEvent의 대리자로 설정하세요.로그인이 성공하면 해제하기 전에 대리자 메서드를 호출합니다.
bool 속성을 설정합니다.
isReloadNeeded
앱 대리인에서.마스터 뷰 컨트롤러에서는viewWillAppear
또는viewWillAppear
데이터를 다시 로드하려면 이 bool을 확인하세요.로그인 뷰 컨트롤러에서 bool을 yes로 설정하고 마스터 뷰 컨트롤러에서 다시 로드한 후 재설정합니다.
수행할 작업 옵션1:
상호 작용을 위한 프로토콜 정의
@protocol LoginDelegate
-(void) loginSuccessPostProcess;
@end
로그인 뷰 컨트롤러에서.
.h 파일 --> 속성 선언
@property (weak) id< LoginDelegate> loginDelegate;
.m --> 로그인 성공 후 해제하기 전에 위임 메서드를 호출합니다.
//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];
메인 뷰 컨트롤러 -> 메소드를 구현합니다.
.h --> 프로토콜 채택
@interface mainViewCOntroller < LoginDelegate>
.중
인스턴스화 후 및 제시하기 전에 Login View Contoller의 대리자 속성에 대한 대리자로 Main view Controller를 설정합니다.
loginViewController *login = [[LoginViewController 할당] 초기화];// 인스턴스화 후 및 로그인을 제시하기 전에 대의원을 설정합니다. logindelegate = self;[자신 존재ViewController:로그인];
다시 로드하는 방법 구현
-(void) loginSuccessPostProcess
{
//Your Method.
}