解雇UIAlertController(最佳实践)

时间:2014-08-17 12:56:35

标签: ios delegates swift

使用UIAlertController时:

var alert = UIAlertController(title: "Core Location", 
     message: "Location Services Disabled!", 
     preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, 
     handler: nil))
self.navigationController.presentViewController(alert, animated: true, 
     completion: nil)

我注意到警报视图的解雇似乎是自动完成的。 不应该通过委托调用呈现 ViewController来解雇所呈现的ViewController吗?

3 个答案:

答案 0 :(得分:6)

解雇是"包括"在presentViewController电话中。您不需要委托,因为您有完成块。在这个块中,您将通常放入委托回调中的内容放入,除了取消警报的调用。

至于"最佳实践"我担心,我注意到在许多API中,Apple用完成块替换了委托回调。 Apple通常建议使用块语法。我猜测这可能部分是因为它有助于将相关的代码部分保持在一起。

答案 1 :(得分:1)

有一种优雅的方式!只需在警报控制器的cancel动作中编写动作或函数。 (此处的操作样式应为.cancel

Swift 3的代码

let Alert: UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.actionSheet)

    let OkAction: UIAlertAction = UIAlertAction(title: “Ok”, style: .default) { ACTION in

       //Will be called when tapping Ok

    }

    let CancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) {ACTION in

      // Will be called when cancel tapped or when alert dismissed.
      // Write your action/function here if you want to do something after alert got dismissed”

    }

    Alert.addAction(OkAction)
    Alert.addAction(CancelAction)

present(Alert, animated: true, completion: nil)

答案 2 :(得分:1)

某些情况下,您可能想使用此功能:

  class MyAlertController : UIAlertController {
    var dismissHandler : (()->())?
    override func viewDidDisappear(_ animated: Bool) {
      dismissHandler?()
      super.viewDidDisappear(animated)
    }
  }

用法:

  let alert = MyAlertController(title: ...
  let cancelButton = UIAlertAction(titl
  alert.dismissHandler = { /*...do something */ }
  alert.addAction(cancelButton)
  ...