Создание всплывающего меню iPhone аналогично меню приложения Mail - PullRequest
21 голосов
/ 26 мая 2009

Я хочу создать всплывающее меню, подобное тому, которое есть в почтовом приложении, когда вы хотите ответить на сообщение. Я видел это в более чем одном приложении, поэтому я не был уверен, есть ли что-то встроенное в инфраструктуру для этого или какой-то пример кода.

UIActionSheet example

Ответы [ 7 ]

22 голосов
/ 07 октября 2015

Создание листа действий в Swift

Код был протестирован с Swift 5

enter image description here

Начиная с iOS 8, используется UIAlertController в сочетании с UIAlertControllerStyle.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: UIAlertController.Style.actionSheet)

        // blue action button
        let blueAction = UIAlertAction(title: "Blue", style: UIAlertAction.Style.default) { (action) in
            print("Blue action button tapped")
        }

        // red action button
        let redAction = UIAlertAction(title: "Red", style: UIAlertAction.Style.default) { (action) in
            print("Red action button tapped")
        }

        // yellow action button
        let yellowAction = UIAlertAction(title: "Yellow", style: UIAlertAction.Style.default) { (action) in
            print("Yellow action button tapped")
        }

        // cancel action button
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.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)

        // present the action sheet
        self.present(myActionSheet, animated: true, completion: nil)
    }
}

Все еще нужна помощь? Посмотрите это видео урок. Вот как я это узнал.

  • Пример UIActionSheet в Swift (Вопреки названию, он действительно использует новый лист действий UIAlertController вместо UIActionSheet.)
20 голосов
/ 26 мая 2009

Это UIAlertController на iOS 8+ и UIActionSheet на более ранних версиях.

14 голосов
/ 26 мая 2009

Посмотрите пример UICatalog на веб-сайте Apple. В разделе «Оповещения» приведены примеры того, как использовать UIActionSheet для выполнения того, что вы пытаетесь сделать.

9 голосов
/ 22 апреля 2014

Вам необходимо использовать 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

5 голосов
/ 03 декабря 2015

Вот как вы это сделаете в 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];
2 голосов
/ 08 сентября 2015

Всем, кто ищет решение в Swift:

  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;
      }
    }
    
0 голосов
/ 21 июля 2017

Я пытался добавить 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...