Бутон за отказ в 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, а не objective-c. :) - person Eric Aya; 23.11.2016