从 UIAlertController 中添加对函数的调用 [重复]

Posted

技术标签:

【中文标题】从 UIAlertController 中添加对函数的调用 [重复]【英文标题】:Add a call to a function from within a UIAlertController [duplicate] 【发布时间】:2018-04-05 16:42:08 【问题描述】:

我的 ios 应用中有一个警报,警报上有两个按钮。当用户选择该选项时,我想调用我拥有的一个名为 searchTheWeb() 的函数:

alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.default, handler: nil))
alert.addAction(UIAlertAction(title: "Search The Web!", style: UIAlertActionStyle.default, handler: nil))

func searchTheWeb()
    let word =  self.userInfo.text! + self.faceResults.text!  + self.labelResults.text!
    if let encoded = word.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed), let url = URL(string: "https://www.google.com/#q=\(encoded)") 
        if #available(iOS 10.0, *) 
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
         else 
            UIApplication.shared.openURL(url)
        
    

所以在那个 addAction 中,标题为 Search The Web!如何调用该函数?

【问题讨论】:

这就是handler 参数的用途???? @vadian 我以为我自己调用了句柄中的函数,但这不起作用。在下面查看 AdamPro 的答案,这很有效! 值得一读documentation 【参考方案1】:

您只需将您声明 searchTheWeb 操作的方式更改为以下内容:

let search = UIAlertAction(title: "Search The Web!", style: .default)  [weak self] _ in
    self?.searchTheWeb()

alert.addAction(search)

【讨论】:

这很有魅力,感谢 Adam!【参考方案2】:

使用警报处理程序

 alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.default, handler: nil))

let search = UIAlertAction(title: "Search The Web!", style: UIAlertActionStyle.default, handler:  (action) -> Void in
    self.searchTheWeb()
)
alert.addAction(search)

func searchTheWeb()
    let word =  self.userInfo.text! + self.faceResults.text!  + self.labelResults.text!
    if let encoded = word.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed), let url = URL(string: "https://www.google.com/#q=\(encoded)") 
        if #available(iOS 10.0, *) 
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
         else 
            UIApplication.shared.openURL(url)
        
    

【讨论】:

以上是关于从 UIAlertController 中添加对函数的调用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 UINavigationItem 扩展中呈现 UIAlertController

如何在 UIAlertController 上添加动态按钮?

如何在 UIAlertController 中添加 UIPickerView?

UIAlertController - 将自定义视图添加到操作表

将 UITextField(来自 UIAlertController)插入 NSMutableArray

Swift3:在 SKView 中添加 UIAlertController