2011-02-08 44 views
6

Sau khi một số công việc tôi có chế độ xem cửa sổ bật lên hiển thị uiview tùy chỉnh bên trong nó xuất hiện đúng cách. Khi bạn nhấn vào bên ngoài chế độ xem cửa sổ bật lên, nó sẽ loại bỏ như mong đợi, tuy nhiên tôi cũng muốn nó loại bỏ khi một nút bên trong nó được khai thác, có ai có thể giúp tôi với điều đó không? Đấu tranh để tìm một hướng dẫn ngắn gọn.Cách thiết lập chế độ xem Cửa sổ bật lên để loại bỏ chính xác

Trả lời

12

Để loại bỏ cửa sổ bật lên theo cách thủ công, bạn cần phải tham chiếu đến cửa sổ bật lên đó. Một vị trí tốt sẽ nằm trong bộ điều khiển chế độ xem hiển thị cửa sổ bật lên.

Để có nút bên trong trình điều khiển chế độ xem nội dung cho bộ điều khiển chế độ xem gốc (hiển thị cửa sổ bật lên) để loại bỏ cửa sổ bật lên, hai cách có thể là giao thức đại biểu + hoặc NSNotificationCenter.

Mã ví dụ bên dưới sử dụng NSNotificationCenter.

Trong .h của bộ điều khiển điểm cho rằng trình bày popover ("PresenterViewController"), thêm một tài sản cho popoverViewController:

@interface PresenterViewController : UIViewController { 
    ... 
    UIPopoverController *popoverController; 
}  
... 
@property (nonatomic, retain) UIPopoverController *popoverController; 
@end 

Trong .m của PresenterViewController:

@synthesize popoverController; 
... 
- (void)showPopover 
{ 
    if (self.popoverController == nil) 
    { 
     ContentFooViewController *content = 
      [[ContentFooViewController alloc] init]; 
     UIPopoverController *popover = [[UIPopoverController alloc] 
      initWithContentViewController:content]; 
     [content release]; 
     self.popoverController = popover; 
     [popover release]; 

     // Listen for the "done" notification which will be posted 
     // by the button in the content view controller. 
     // When the notification is received, 
     // call the contentFooViewControllerDone: method... 
     [[NSNotificationCenter defaultCenter] 
      addObserver:self 
      selector:@selector(contentFooViewControllerDone:) 
      name:@"contentFooViewControllerDone" 
      object:popoverController.contentViewController]; 
    } 

    [self.popoverController presentPopoverFromRect:... 
     // OR 
    [self.popoverController presentPopoverFromBarButtonItem:... 
} 

- (void)contentFooViewControllerDone:(NSNotification *)notification 
{ 
    // Button in content view controller was tapped, dismiss popover... 
    [self.popoverController dismissPopoverAnimated:YES]; 
} 

- (void)dealloc 
{ 
    //stop listening for notifications and release popoverController... 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [popoverController release]; 
    [super dealloc]; 
} 

Trong trình điều khiển chế độ xem nội dung, hãy triển khai phương pháp nhấn nút như sau:

- (IBAction)dismissButtonTapped 
{ 
    [[NSNotificationCenter defaultCenter] 
     postNotificationName:@"contentFooViewControllerDone" object:self]; 
} 
+2

Một báo trước cho phương pháp này là nếu bạn đóng cửa sổ bật lên bằng cách nhấn vào bên ngoài nó, nó sẽ không bao giờ bị loại bỏ đúng vì bạn vẫn có một tham chiếu đến nó. Điều này là tốt nếu bạn không nhớ giữ một bộ điều khiển xem thêm xung quanh, nhưng thường là bộ nhớ ở phí bảo hiểm và bạn không muốn làm điều này. Vì vậy, bạn cũng nên sử dụng popoverControllerDidDismissPopover: (- void) popoverControllerDidDismissPopover: (UIPopoverController *) popoverController' để đặt thuộc tính là nil. – memmons

+0

@Hark: Tốt, cảm ơn. – Anna

+0

Điều này thật tuyệt vời - cho những người khác ở ngoài đó cũng lưu ý rằng Apple không khuyến khích có một nút chỉ đơn giản là đóng cửa sổ bật lên. Có khả năng ứng dụng của bạn cũng làm được điều gì đó khác với nút đó, điều đó rất tốt. :) – ekinnear

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