Возвращает значение Bool из Function после показа AlertView

У меня есть возможность распечатать документ в основном в моем приложении. Теперь некоторые документы не могут быть напечатаны (если не указан критерий). Поэтому я использую делегатов.

Обратите внимание, что я использую смесь обоих Objective C а также Swift,

В основном мой код печати выглядит следующим образом:

if ([self.delegate respondsToSelector:@selector(shouldPrintDocument)]) {
        BOOL shouldPrint = [self.delegate shouldPrintDocument];
        NSLog(@"Should Print %d", shouldPrint);
        if (shouldPrint){
              //We will print here
        }
}

Сейчас на Swift С другой стороны, что мне по сути нужно сделать, это подтвердить с пользователем, если они хотят продолжить печать документа. Итак, я использую UIAlertController,

Вопрос в том, как мне вернуть значение bool из этого представления предупреждений.

func shouldPrintDocument() -> Bool {
    let alertController = UIAlertController(title:"Confirm Print",
        message: message,
        preferredStyle: UIAlertControllerStyle.Alert)

    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction) -> Void in
        alertController.dismissViewControllerAnimated(true, completion: { _ in })
        return false 
    })
    alertController.addAction(cancelAction)
    let ok: UIAlertAction = UIAlertAction(title: "Confirm", style: .Default, handler: {(action: UIAlertAction) -> Void in
        alertController.dismissViewControllerAnimated(true, completion: { _ in })
        //Perform some core data work here, i.e., save a few things and return
        return true // This is where the issue comes in
    })

    alertController.addAction(ok)
    self.presentViewController(alertController, animated: true, completion: nil)
}

2 ответа

Решение

Вы не возвращаете bool из вида предупреждений. Ваш "хорошо" обработчик UIAlertAction - это место, где вы должны предпринять соответствующие действия. Проверьте там, должен ли документ быть напечатан, а затем распечатайте его. Или вызовите метод, который сделает это. Но сделайте это из обработчика. Обработчик - это блок кода, в котором у вас есть комментарий "// Выполнить некоторые основные операции с данными..."

Попробуй это:

var isprint:BOOL = false

func shouldPrintDocument() -> Bool {
let alertController = UIAlertController(title:"Confirm Print",
    message: message,
    preferredStyle: UIAlertControllerStyle.Alert)

let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: {(action: UIAlertAction) -> Void in
    alertController.dismissViewControllerAnimated(true, completion: { _ in })
    isprint = false
})
alertController.addAction(cancelAction)
let ok: UIAlertAction = UIAlertAction(title: "Confirm", style: .Default, handler: {(action: UIAlertAction) -> Void in
    alertController.dismissViewControllerAnimated(true, completion: { _ in })
    //Perform some core data work here, i.e., save a few things and return
    isprint = true// This is where the issue comes in
})

alertController.addAction(ok)
 self.presentViewController(alertController, animated: true, completion: nil)
}
Другие вопросы по тегам