创buildiPhonepopup菜单类似于邮件应用程序菜单

我想创build一个类似于邮件应用程序中popup菜单,当你想回复一条消息。 我在一个以上的应用程序中看到了这个,所以我不确定是否在框架中有内置的东西或者代码。

UIActionSheet示例

查看Apple网站上的UICatalog示例。 “警报”部分提供了如何使用UIActionSheet来完成你想要做的事情的例子。

它是iOS 8+上的UIAlertController ,以及早期版本的UIActionSheet

在Swift中创build一个操作表

代码已经更新了Swift 3

在这里输入图像说明

从iOS 8开始,使用UIAlertControllerUIAlertControllerStyle.ActionSheetUIActionSheet已弃用。

下面是在上面的图片中生成操作表的代码:

 class ViewController: UIViewController { @IBOutlet weak var showActionSheetButton: UIButton! @IBAction func showActionSheetButtonTapped(sender: UIButton) { // Create the action sheet let myActionSheet = UIAlertController(title: "Color", message: "What color would you like?", preferredStyle: UIAlertControllerStyle.actionSheet) // blue action button let blueAction = UIAlertAction(title: "Blue", style: UIAlertActionStyle.default) { (action) in print("Blue action button tapped") } // red action button let redAction = UIAlertAction(title: "Red", style: UIAlertActionStyle.default) { (action) in print("Red action button tapped") } // yellow action button let yellowAction = UIAlertAction(title: "Yellow", style: UIAlertActionStyle.default) { (action) in print("Yellow action button tapped") } // cancel action button let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { (action) in print("Cancel action button tapped") } // add action buttons to action sheet myActionSheet.addAction(blueAction) myActionSheet.addAction(redAction) myActionSheet.addAction(yellowAction) myActionSheet.addAction(cancelAction) // support iPads (popover view) myActionSheet.popoverPresentationController?.sourceView = self.showActionSheetButton myActionSheet.popoverPresentationController?.sourceRect = self.showActionSheetButton.bounds // present the action sheet self.present(myActionSheet, animated: true, completion: nil) } } 

仍然需要帮助? 观看这个video教程。 这就是我学到的。

  • UIActionSheet在Swift中的例子 (与名称相反,它实际上使用新的UIAlertController操作表而不是UIActionSheet 。)

您需要使用UIActionSheet。

首先,您需要将UIActionSheetDelegate添加到您的ViewController .h文件中。

然后你可以参考一个操作表:

  UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:@"Select Sharing option:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles: @"Share on Facebook", @"Share on Twitter", @"Share via E-mail", @"Save to Camera Roll", @"Rate this App", nil]; popup.tag = 1; [popup showInView:self.view]; 

那么你必须处理每个电话。

 - (void)actionSheet:(UIActionSheet *)popup clickedButtonAtIndex:(NSInteger)buttonIndex { switch (popup.tag) { case 1: { switch (buttonIndex) { case 0: [self FBShare]; break; case 1: [self TwitterShare]; break; case 2: [self emailContent]; break; case 3: [self saveContent]; break; case 4: [self rateAppYes]; break; default: break; } break; } default: break; } } 

从iOS 8.x开始,这已被弃用。

https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIAlertController_class/index.html

这就是你如何在Objective-C的iOS 8+上做到这一点:

  UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions" message:@"Select mode of transportation:" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *drivingAction = [UIAlertAction actionWithTitle:@"Driving" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // this block runs when the driving option is selected }]; UIAlertAction *walkingAction = [UIAlertAction actionWithTitle:@"Walking" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // this block runs when the walking option is selected }]; UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]; [alert addAction:drivingAction]; [alert addAction:walkingAction]; [alert addAction:defaultAction]; [self presentViewController:alert animated:YES completion:nil]; 

对于所有在Swift中寻找解决scheme的人:

  1. 采用UIActionSheetDelegate协议

  2. 创build并显示ActinSheet:

     let sheet: UIActionSheet = UIActionSheet() sheet.addButtonWithTitle("button 1") sheet.addButtonWithTitle("button 2") sheet.addButtonWithTitle("button 3") sheet.addButtonWithTitle("Cancel") sheet.cancelButtonIndex = sheet.numberOfButtons - 1 sheet.delegate = self sheet.showInView(self.view) 
  3. 委托function:

     func actionSheet(actionSheet: UIActionSheet!, clickedButtonAtIndex buttonIndex: Int){ switch buttonIndex{ case 0: NSLog("button1"); case 1: NSLog("button2"); case 2: NSLog("button3"); case actionSheet.cancelButtonIndex: NSLog("cancel"); break; default: NSLog("blub"); break; } } 

我试图在我的视图中添加ActionSheet。 所以我一直在试图find完美的解决scheme,但一些答案让我感到困惑。 因为关于操作表的大部分问题都是很久以前写的,所以还没有更新。 无论如何…我会写旧版本的ActionSheet和更新版本的ActionSheet。 我希望我的回答能够让你的大脑和平。

– – – – – 更新后的版本 – – – – –

  UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"Action Sheet" message:@"writeMessageOrsetAsNil" preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction* actionSheet01 = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { NSLog(@"OK click");}]; UIAlertAction* actionSheet02 = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {NSLog(@"OK click");}]; UIAlertAction* actionSheet03 = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { NSLog(@"Cancel click");}]; [browserAlertController addAction:actionSheet01]; [browserAlertController addAction:actionSheet02]; [browserAlertController addAction:actionSheet03]; [self presentViewController:browserAlertController animated:YES completion:nil]; 

– – – -旧版 – – –

 UIActionSheet *actionSheet= [[UIActionSheet alloc] initWithTitle:@"Select Sharing option:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@“OK”, @“NO”,@“Cancel”, nil]; actionSheet.tag = 100; [actionSheet showInView:self.view]; - (void)actionSheet:(UIActionSheet *)actionShee clickedButtonAtIndex:(NSInteger)buttonIndex { if( actionSheet.tag == 100){ switch (buttonIndex) { case 0: [self doSomething]; break; case 1: [self doAnything]; break; case 2: [self doNothing]; break; default: break; } break; } }