2013-08-05 31 views
23

Làm thế nào tôi có thể gọi viewwillappear sau khi loại bỏ modalviewcontroller?Calling viewwillappear sau khi loại bỏ modalviewcontroller

Bất kỳ ý tưởng xin vui lòng bởi vì sau khi sa thải viewwillappear của tôi đã không được gọi:

trình bày viewController tôi modally: // firsviewcontroller:

-(IBAction)AddActivity:(id)sender{ 


    CreateActivity *addViewController = [[CreateActivity alloc] initWithNibName:@"CreateActivity" bundle:nil]; 

    addViewController.delegate = self; 
    addViewController.modalPresentationStyle = UIModalPresentationFormSheet; 

    addViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

    [self presentModalViewController:addViewController animated:YES]; 


    addViewController.view.superview.frame = CGRectMake(50, 260, 680, 624); 

} 

// secondvioewcontroller: Tôi tạo Một alertview để sa thải này modalview, nhưng viewwillapear không được gọi là:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (buttonIndex == 0){ 


     if ([self respondsToSelector:@selector(presentingViewController)]){ 
      [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
     } 
     else { 
      [self.parentViewController dismissModalViewControllerAnimated:YES]; 
     } 
    } 
} 
+3

Bạn có chắc chắn không? Bạn kiểm tra như thế nào? Theo kinh nghiệm của tôi, viewWillAppear luôn kích hoạt cho trình điều khiển xem trình bày khi phương thức được trình bày bị loại bỏ. – geraldWilliam

+0

Tôi đã chỉnh sửa bài đăng của mình để xem tôi đã làm gì, Tôi đang thiếu gì? –

+0

@OuassimMouyarden Bạn cần phải học cách suy nghĩ về OOP đúng cách trước khi đi thẳng vào mọi thứ. Điều đó đang được nói, tôi vẫn sẽ giúp bạn, cho đến bây giờ. Bạn muốn điều gì xảy ra chính xác khi nhấn nút UIAlertView? –

Trả lời

11

Vì bạn đang trình bày t ông bộ điều khiển chế độ xem dưới dạng tờ biểu mẫu, chế độ xem của bộ điều khiển trình bày không bao giờ biến mất, do đó, viewWillAppear: không được gọi sau khi loại bỏ. Nếu bạn muốn trình điều khiển xem trình bày xử lý điều gì đó sau khi loại bỏ, hãy gọi phương thức ủy nhiệm trong phương thức viewDidDisappear: của phương thức điều khiển. Bạn đã thiết lập đại biểu, vì vậy tôi đoán bạn đã có giao thức đại biểu trong CreateActivity.

Nhân tiện, bạn nên sử dụng các phương pháp không được dùng để trình bày và loại bỏ bộ điều khiển chế độ xem phương thức của mình.

+0

thay vì gọi phương thức ủy nhiệm, bạn có thể thực thi mã khi hoàn thành: cho dismissViewController: animated: completion :.Đặt mã trong viewDidDisappear có thể có vấn đề nếu bộ điều khiển là một phần của ngăn xếp nav (ví dụ: bạn đẩy một bộ điều khiển khác ..) Nếu bạn vẫn muốn sử dụng viewDidDisappear, hãy chắc chắn kiểm tra self.isBeingDismissed. – TomSwift

12

presentModalViewController:animated:/dismissModalViewControllerAnimated: không còn được dùng nữa. Sử dụng presentViewController:animated:completion:/dismissViewControllerAnimated:completion: để thay thế.

Bạn có thể sử dụng các khối hoàn thành để thực hiện bất kỳ mã bưu dismisal:

- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     MyCustomViewController* mcvc = (MyCustomViewController*)self.presentingViewController; 

     [self dismissViewControllerAnimated: YES completion: ^{ 

      // call your completion method: 
      [mcvc someCustomDoneMethod]; 
     }]; 
    } 
} 

Hơn thế nữa, nếu bạn đang sử dụng một kịch bản thì bạn có thể thực hiện một segue thư giãn và kích hoạt mã hoàn thành của bạn trong callback Thư giãn phương pháp.

+0

cảm ơn bạn đã trả lời, do đó, [self.presentingViewController someCustomDoneMethod]; someCustomDoneMethod phải được định nghĩa trong firstviewcontroller của tôi, nó sẽ được gọi sau khi loại bỏ modalview ?? –

+0

có. bạn có thể sẽ phải đưa ra presentingViewController vào kiểu bộ điều khiển tùy chỉnh của bạn để bạn có thể gọi phương thức này. Lưu ý tôi đang thực hiện một chỉnh sửa cho mẫu. Bạn không cần phải gọi dismissViewControllerAnimated trên bộ điều khiển xem trình bày. Bạn chỉ có thể gọi nó là chống lại bản thân. – TomSwift

Các vấn đề liên quan