Несколько дней назад я делаю что-то подобное для ipad.
Давайте назовем вашу кнопку photoButton
, и это переменная в нашем контроллере.Также добавьте переменную popoverController
(это необходимо для соответствующего закрытия поповера).
Когда нажата кнопка photoButton, мы вызываем следующий метод:
- (void)photoButtonPressed:(id)sender {
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.allowsEditing = NO;
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];
popoverController.delegate = self;
[popoverController presentPopoverFromRect:sender
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
[imagePickerController release];
}
Также вы должны реализовать следующие методы для поддержки UIImagePickerControllerDelegate и UIPopoverControllerDelegateпротокол:
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage:(UIImage *)selectedImage
editingInfo:(NSDictionary *)editingInfo {
[photoButton setImage:selectedImage forState:UIControlStateNormal];
if ([popoverController isPopoverVisible]) {
[popoverController dismissPopoverAnimated:YES];
}
}
#pragma mark - UIPopoverControllerDelegate
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverContr {
[popoverContr release];
if (popoverContr == popoverController)
popoverController = nil;
}