Кнопка «Отмена» в UIAlertController с UIAlertControllerStyle.ActionSheet

Я хочу добавить отдельную кнопку отмены в свой UIAlert.

Я знаю, как это сделать с помощью UIActionSheet, но это же должно быть возможно и с UIAlert, верно?

var sheet: UIActionSheet = UIActionSheet();
    let title: String = "...";
    sheet.title  = title;
    sheet.delegate = self;
    sheet.addButtonWithTitle("Cancel");
    sheet.addButtonWithTitle("...")
    sheet.cancelButtonIndex = 0;
    sheet.showInView(self.view);

Это будет иметь кнопку ... и кнопку отмены, которые разделены.

Так кто-нибудь знает, как это сделать с

    var alert = UIAlertController(title: "...", message: "....", preferredStyle: UIAlertControllerStyle.ActionSheet)

?

Я новичок в xcode и swift, поэтому извините, если этот вопрос глупый или что-то в этом роде...


person Community    schedule 16.11.2014    source источник


Ответы (3)


Это действительно просто, но работает немного иначе, чем раньше. Теперь вы добавляете «действия» к своим оповещениям. Эти действия затем представлены кнопками на устройстве.

alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

Выше приведен код, необходимый для простой кнопки отмены — имейте в виду, что отклонение предупреждения выполняется автоматически, поэтому не помещайте его в свой обработчик. Если затем вы захотите создать еще одну кнопку, которая что-то делает, используйте код ниже:

alert.addAction(UIAlertAction(title: "Button", style: UIAlertActionStyle.Default, handler: { action in
        println("This button now calls anything inside here!")
    }))

Надеюсь, я понял ваш вопрос, и это отвечает на то, что вы спрашивали. Я также добавлю, что после того, как вы добавили все «действия», вы представляете предупреждение, используя код ниже:

self.presentViewController(alert, animated: true, completion: nil)

Надеюсь это поможет!

person Jack Chorley    schedule 16.11.2014
comment
Хотя это работает, это не отвечает на часть его вопроса о добавлении отдельной кнопки отмены, как это делает UIActionSheet. UIAlertController не добавляет разделитель перед кнопкой отмены, например UIActionSheet. - person jjxtra; 28.03.2015
comment
@PsychoDad, ты совершенно прав! - Должно быть, я неправильно понял вопрос, когда впервые ответил на него. Я не знаю, как создать разделитель без написания пользовательского UIAlert, поэтому, боюсь, я не смогу изменить этот вопрос. - person Jack Chorley; 28.03.2015
comment
Если вы добавляете действие со стилем, установленным на UIAlertActionStyle.Cancel, разделитель добавляется автоматически. - person Miroslav Hrivik; 21.10.2015
comment
@MiroslavHrivik Нет, разделитель не добавляется, даже если стиль настроен на отмену. - person Abdalrahman Shatou; 18.01.2016

Я хотел пойти дальше и дать конкретный ответ на конкретный вопрос. Пользователь спросил о реализации кнопки «отмена», а не кнопки по умолчанию. Проверьте ответ ниже!

let alertController = UIAlertController(title: "Select one", message: "Hey! Press a button", preferredStyle: .actionSheet)

let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

alertController.addAction(cancelAction)

self.present(alertController, animated: true, completion: nil)
person Community    schedule 29.01.2017
comment
Это правильный ответ, который показывает, как добавить разделитель благодаря style: .cancel - person Pierre Capo; 17.08.2020

Это может быть худший закодированный ответ, который вы могли бы увидеть, но я смог выполнить ваше требование, попробовав это:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert Title" message:@"Alert Message" preferredStyle:UIAlertControllerStyleAlert];
UILabel *alertLine = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, alertController.view.frame.size.width, 2)];
alertLine.backgroundColor=[UIColor blackColor];
[alertController.view.preferredFocusedView addSubview:alertLine];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:ok];
[self.navigationController presentViewController:alertController animated:YES completion:nil];
person Pradeep Mittal    schedule 11.05.2016
comment
Проблема здесь в том, что вопрос помечен тегом swift, а не объективным-c. :) - person Eric Aya; 23.11.2016