Tôi đã đọc tấn về nội dung này và trong khi hầu hết dường như liên quan đến cách tiếp cận không phải cốt truyện, tôi nghĩ mình đã ghép các bit lại với nhau và tìm ra. Tuy nhiên, mã sau đây không dẫn đến việc cửa sổ bật lên của tôi bị loại bỏ. Nút dismissPopoverButtonPressed trong Popover thực hiện nhưng một breakpoint trong phương thức dismissPopover trong delegate không bao giờ là hits. Sẽ rất nhiều đánh giá cao một người nào đó để mắt qua mã để phát hiện ra những sai lầm.Bảng phân cảnh: Loại bỏ Popover bằng cách sử dụng phương thức đại biểu/giao thức
Cảm ơn
Trong trường hợp sau, NewGameViewController chứa UIButton. Nhấn kết quả này trong Popover Segue và hiển thị tiếp theo của cửa sổ bật lên chứa PopViewController UIView.
NewGameViewController.h
#import "PopViewController.h"
@interface NewGameViewController: UIViewController <DismissPopoverDelegate>
{
UIPopoverController *popover;
}
NewGameViewController.m
@implementation NewGameViewController
-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"popoverSegue"])
{
popover = [(UIStoryboardPopoverSegue *)segue popoverController];
// getting warning: Assigning to 'id<UIPopoverControllerDelegate>' from incompatible type 'NewGameViewController *const__strong'
//popover.delegate = self;
}
}
-(void)dismissPopover
{
[popover dismissPopoverAnimated:YES];
}
PopViewController.h
@protocol DismissPopoverDelegate <NSObject>
-(void) dismissPopover;
@end
@interface PopViewController: UIViewController
{
__unsafe_unretained id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender;
@end
PopViewController.m
#import "NewGameViewController.h"
@implementation PopViewController
@synthesize delegate;
-(IBAction)dismissPopoverButtonPressed:(id)sender
{
[self.delegate dismissPopover];
}
Cảm ơn. Tôi phải thừa nhận, tôi thực hiện mã này không hoàn toàn hiểu được logic nhưng tôi nhớ lại đọc nhiều ý kiến về việc phải khai báo rõ ràng một giao thức và ủy nhiệm để các sự kiện Popover có thể được xử lý trong VC tạo ra nó. Chắc chắn, các cách tiếp cận dường như khác nhau dựa trên việc Popover có được tạo rõ ràng trong mã hay không thông qua Storyboard. Với điều đó đã nói, tôi vẫn không khôn ngoan hơn ở trên. – Tony
Tôi cũng đã thử đổi tên 'đại biểu' để ngăn chặn các xung đột như bạn đề xuất nhưng không có sự khác biệt. Khi bạn nói rằng cửa sổ popar của tôi nên được cụ thể hơn - bạn có ý nghĩa gì? – Tony
Nếu SHARRP đang xem nội dung này, bạn có thể tạo một dự án ví dụ hay không (tương tự như dự án bạn đã làm cho http://stackoverflow.com/questions/5922254/how-to-dismiss-uipopover-from-a- button-in-the-popover) làm điều tương tự nhưng bằng cách sử dụng Storyboard (ví dụ, kiểm soát-kéo một segue để UIViewController mà xem sẽ xuất hiện bên trong Popover). Mã của tôi ở trên là một nỗ lực để thực hiện ví dụ của bạn nhưng có điều gì đó không đúng và việc sử dụng Storyboard/Segue có vẻ là sự khác biệt chính. – Tony