愛德馬蒂已經寫
如果您想通過按下一個按鈕駁回酥料餅,一些地方相關的應恪守酥料餅
參考這是非常真實的;但是,在顯示UIPopoverController時,打開popovercontroller的類已經保存了該資源。所以,你可以做的是使用這個類作爲你的Popover控制器的委託類。
爲此,您可以執行以下操作,在代碼中使用該操作。 在課堂上打開酥料餅,這是我的代碼:
- (void)showInformationForView:(Booking*)booking frame:(CGRect)rect
{
BookingDetailsViewController *bookingView = [[BookingDetailsViewController alloc] initWithStyle:UITableViewStyleGrouped booking:booking];
[bookingView setDelegate:self];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:bookingView];
self.popController = [[UIPopoverController alloc] initWithContentViewController:navController];
[self.popController setDelegate:self];
[self.popController setPopoverContentSize:CGSizeMake(320, 320)];
rect.size.width = 0;
[self.popController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
- (void)dismissPopoverAnimated:(BOOL)animated
{
[self.popController dismissPopoverAnimated:animated];
}
那麼我這裏做的是創造一個UINavigationController
和設置BookingDetailsViewController
爲rootViewController
。然後,我還將當前班級作爲代表添加到此BookingDetailsViewController
。
我添加的第二件事是一種名爲dismissPopoverAnimated:animated
的解僱方法。
在我BookingDetailsViewController.h
添加以下代碼:
[...]
@property (nonatomic, strong) id delegate;
[...]
在我BookingDetailsViewController.m
我加入這個代碼:
[...]
@synthesize delegate = _delegate;
- (void)viewDidLoad
{
UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(closeView)];
[self.navigationItem setRightBarButtonItem:closeButton];
[super viewDidLoad];
}
- (void)closeView
{
if ([self.delegate respondsToSelector:@selector(dismissPopoverAnimated:)]) {
[self.delegate dismissPopoverAnimated:YES];
}
else {
NSLog(@"Cannot close the view, nu such dismiss method");
}
}
[...]
什麼情況是,當UINavigationController的「關閉」按鈕按下,調用方法closeView
。此方法檢查代理是否響應dismissPopoverAnimated:animated
,如果是,則調用它。如果它不響應這個方法,它會顯示一條日誌消息並且什麼也不做(所以它不會崩潰)。
我用ARC寫過我的代碼,因此沒有內存管理。
我希望這對你有所幫助。
謝謝。我會改變代碼! – SpaceDog 2010-04-13 16:00:40
第二段在這個答案中非常重要。請記住,根據iPad編程指南:「但請注意,您有責任存儲對popover控制器的引用,以便解除它,系統默認不提供。」因此,不要對其執行「釋放」(直到父視圖進入dealloc階段)。 (這是我的安全方法)。 – Jann 2010-04-14 17:04:25
只需使用[self dismissViewControllerAnimated:YES completion:nil]; 「呈現視圖控制器負責解除其呈現的視圖控制器,如果您在呈現的視圖控制器本身上調用此方法,它會自動將該消息轉發給呈現視圖控制器。」 – 2014-04-03 18:44:20