iPhone에서 스택에서 뷰 컨트롤러를 팝업 한 후 자동으로 메소드를 호출하는 방법

StackOverflow https://stackoverflow.com/questions/1001441

  •  05-07-2019
  •  | 
  •  

문제

내비게이션 스택에서 자식보기를 팝업 한 후 iPhone의 부모보기를 업데이트해야합니다. 자녀가 스택에서 튀어 나와 부모가 다시 볼 수있게되면 부모보기를 알리거나 자동 메소드 호출을받을 수있는 방법은 무엇입니까?

사용자는 사용자가 완료된 후 부모 페이지에 표시하려는 자식 페이지에 데이터를 입력하고보기를 나타냅니다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

나는 방금이 자아와 동일한 문제를 해결했습니다. 위의 답변은 거의 정확합니다. 그들은 대의원을 설정하는 것을 잊었습니다.

목록의 크기를 표시하고 목록의 크기를 변경할 수있는 하위보기 컨트롤러를 호출하고 반품시 크기를 업데이트 해야하는 루트보기 컨트롤러가 있습니다.

부모보기 (아래의 SettingSview)를 만들고 UinaVigationController의 루트보기로 추가하면보기를 표시하기 전에 UinavigationController의 대의원을 설정해야합니다. 이것이 핵심 부분입니다.

SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv];
[nc setDelegate:sv];

상위보기에서 uinavigationcontrollerdelegate 프로토콜을 구현하십시오.

@interface SettingsView : UIViewController <UINavigationControllerDelegate>

WillshowViewController 메소드를 제공합니다.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // Your code to update the parent view
}

이것은 아동 전망이 기각 된 후에 호출되며, 부모의 견해가 재생되기 전에.

다른 팁

나는 이런 일을해야 할 필요가 있었다. 에서 ViewController 내 소유 uinavigationcontroller, 나는 구현해야했다 WillshowViewController, 이와 같이:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
}

이 메소드는 UinavigationController가 뷰를 변경할 때마다 호출됩니다. 당신의 질문을 올바르게 이해한다면, 이것이 당신이 원하는 것을해야한다고 생각합니다.

나는 여기에 약간의 혼란이 있다고 생각합니다. UIViews는 밀어 붙여서 튀어 나오지 않습니다 UINavigationController스택. 밀고 튀어 나오는 것은입니다 UIViewControllers, 이것은 각각 하나 또는 (더 자주) 여러 조회수를 처리합니다.

다행히도 UIViewController 이러한 방법이 있습니다.

-(void) viewWillAppear:(BOOL)animated;
-(void) viewDidAppear:(BOOL)animated;
-(void) viewWillDisappear:(BOOL)animated;
-(void) viewDidDisappear:(BOOL)animated;

이들은보기가 나타날 때마다 (dis)가 나타나거나 (dis)가 나타날 때마다 호출됩니다. 탭 바, 모달보기 및 내비게이션 컨트롤러로 작업합니다. (그리고 사용자 정의 컨트롤러를 구현할 때이를 사용하는 것이 좋습니다.)

따라서 귀하의 경우, 내가 올바르게 이해하면 단순히 viewWillAppear: 또는 viewDidAppear: "부모 페이지"라고 부르는 방법 (아마도 UIViewController) 그리고 방금 입력 한 데이터를 반영하기 위해 페이지의 모양을 업데이트하기 위해 코드를 넣습니다.

(내가 정확하게 기억한다면 UINavigationController a viewWill/DidAppear: 이 메시지가 처음 표시 될 때의 메시지는 나중에 자식 컨트롤러로 전송되기 위해. 템플릿이나 IB로 설정하면 걱정할 필요가 없습니다.)

Felixyz Answer는 저에게 트릭을했습니다. 보기를 호출하면 뷰가 나타날 때마다 메소드가 코드가 실행됩니다. View와는 다릅니다.로드는로드되었으며, 이는 뷰가 처음로드 된 경우에만 코드를 실행합니다. 따라서 자녀 뷰가 부모에게 표시된 정보를 변경 한 다음 자루에서 튀어 나온 경우 부모의 견해가 업데이트되지 않습니다. 그러나 부모가 뷰를 호출하면 뷰가 다시 표시 될 때마다 코드가 실행됩니다.

슈퍼 메소드를 동시에 호출하십시오. 적절한 구현은 다음과 같습니다.

- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
    NSLog(@"View Appearing");
}

한 컨트롤러에 다른 컨트롤러에 알리는 경우 설명대로 위임 패턴을 사용할 수 있습니다. 여기 (두 번째 답변 참조).

불행히도 설명대로 정확한 작업에 대한 자동 알림 (AFAIK)은 없습니다. 귀하의 요구를 충족 시키려면 Delegate (예 : 부모 컨트롤러)에게 메시지를 보낼 수 있습니다. ViewWillDisAppear 자녀 컨트롤러의 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top