UIPopover如何使用这样的button制作popover?

在这里输入图像说明

我想知道如何创build一个像这样的buttonpopover。

回答:

UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: nil destructiveButtonTitle: nil otherButtonTitles: @"Take Photo", @"Choose Existing Photo", nil]; [actionSheet showFromRect: button.frame inView: button.superview animated: YES]; 

你的委托对象类中的其他地方…

 -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) { // take photo... } else if (buttonIndex == 1) { // choose existing photo... } } 

这是一个UIActionSheet 。 在iPhone上,它从底部开始animation。 在iPad上出现在popup窗口。

假设你按下button来做这件事:

 UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: nil destructiveButtonTitle: nil otherButtonTitles: @"Take Photo", @"Choose Existing Photo", nil]; [actionSheet showFromRect: button.frame inView: button.superview animated: YES]; 

在iOS8 +中,您应该使用新的UIAlertController类:

 UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil message: nil preferredStyle: UIAlertControllerStyleActionSheet]; [alertController addAction: [UIAlertAction actionWithTitle: @"Take Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { // Handle Take Photo here }]]; [alertController addAction: [UIAlertAction actionWithTitle: @"Choose Existing Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) { // Handle Choose Existing Photo here }]]; alertController.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController * popover = alertController.popoverPresentationController; popover.permittedArrowDirections = UIPopoverArrowDirectionUp; popover.sourceView = sender; popover.sourceRect = sender.bounds; [self presentViewController: alertController animated: YES completion: nil]; 

或者在Swift中

 let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) alertController.addAction(UIAlertAction(title: "Take Photo", style: .Default, handler: { alertAction in // Handle Take Photo here })) alertController.addAction(UIAlertAction(title: "Choose Existing Photo", style: .Default, handler: { alertAction in // Handle Choose Existing Photo })) alertController.modalPresentationStyle = .Popover let popover = alertController.popoverPresentationController! popover.permittedArrowDirections = .Up popover.sourceView = sender popover.sourceRect = sender.bounds presentViewController(alertController, animated: true, completion: nil) 

与其他答案类似,但这相比较而言很容易实现。

让你的class级使用UIActionSheetDelegate。

例:

 @interface ExampleViewController : UIViewController <UIActionSheetDelegate> 

然后添加到您的ExampleViewController.mm/m

 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { //Get the name of the current pressed button NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; if ([buttonTitle isEqualToString:@"Remove"]) { NSLog(@"Remove this actionSheet"); } if ([buttonTitle isEqualToString:@"Button 1"]) { NSLog(@"Button 1 pressed"); } if ([buttonTitle isEqualToString:@"Button 2"]) { NSLog(@"Button 2 pressed"); } if ([buttonTitle isEqualToString:@"Button 3"]) { NSLog(@"Button 3 pressed"); } if ([buttonTitle isEqualToString:@"Cancel"]) { NSLog(@"Cancel clicked (anywhere away from it)"); } } 

现在在一个button按下的事件,或者当你想要这个popup窗口调用以下内容:

  - (IBAction)aButtonPressed:(id)sender { NSString *actionSheetTitle = @"Action Sheet"; // Title NSString *destroyTitle = @"Destroy"; // Button titles NSString *button1 = @"Button 1"; NSString *button2 = @"Button 2"; NSString *button3 = @"Button 3"; NSString *cancelTitle = @"Cancel"; UIActionSheet *actionSheet = [[UIActionSheet alloc]                              initWithTitle:actionSheetTitle                              delegate:self                              cancelButtonTitle:cancelTitle                             destructiveButtonTitle:destroyTitle                              otherButtonTitles:button1, button2, button3, nil]; [actionSheet showInView:self.view]; } 

关于这个@的更多信息: http : //developer.apple.com/library/ios/#documentation/uikit/reference/UIActionSheet_Class/Reference/Reference.html