2009-05-26 99 views
18

我想创建一个类似于邮件应用程序中找到的弹出式菜单,当您要回复邮件时。我已经在多个应用程序中看到过这个,所以我不确定是否有框架内置某些东西或者某些示例代码。创建iPhone弹出菜单类似于邮件应用程序菜单

UIActionSheet example

+0

我在这里找到的最佳资源http://code.tutsplus.com/tutorials/uiactionsheet-and-uiactionsheetdelegate--mobile-11590 – Nepster 2014-08-30 07:14:45

回答

14

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

9

您需要使用UIActionSheet。

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

然后你可以引用actionsheet有:

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

2

大家谁正在寻找在斯威夫特的解决方案:

  1. 采用UIActionSheetDelegate协议

  2. 创建和显示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. 的委托功能于:

    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; 
        } 
    } 
    
19

创建在夫特的动作表

代码已被更新的夫特3

enter image description here

由于iOS 8的,UIAlertControllerUIAlertControllerStyle.ActionSheet组合使用。 UIActionSheet已弃用。

这里是产生上述图像中的行动表上的代码:

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) 
    } 
} 

仍然需要帮助?观看这个视频教程。我就是这样学习的。

+0

嗨@Suragch,我尝试你的代码。它适用于iPad和iPod。但是,取消按钮不会出现在iPad中。我不知道为什么。它在iPod中显示,我用不按钮。我使用图像并在其上添加水龙头功能。所以,我的代码是alertController.popoverPresentationController?.sourceView = self.imgPlay和 alertController.popoverPresentationController?.sourceRect = self.imgPlay.bounds。 – 2017-03-09 07:03:03

5

这是你如何做到这一点在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]; 
0

我尝试添加ActionSheet对我的看法。所以我一直在试图找到完美的解决方案,但一些答案让我感到困惑。因为关于操作表的大部分问题都是很久以前写的,所以还没有更新。 无论如何...我会写旧版本的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; 
    } 

}