返回 UIAlertControllerStyle.ActionSheet 中选择的动作

Posted

技术标签:

【中文标题】返回 UIAlertControllerStyle.ActionSheet 中选择的动作【英文标题】:Return the action Selected in UIAlertControllerStyle.ActionSheet 【发布时间】:2014-12-02 11:46:35 【问题描述】:

我是 Swift 和 ios 开发的新手。 我正在尝试从 ActionSheet 获取排序方法。 这是我的代码:

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

    alert.addAction(UIAlertAction(title: "Price: Low to High", style: UIAlertActionStyle.Default, handler: nil))

    alert.addAction(UIAlertAction(title: "Latest", style: UIAlertActionStyle.Default, handler: nil))

    alert.addAction(UIAlertAction(title: "Price: High to Low", style: UIAlertActionStyle.Default , handler: nil))

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

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

我知道我可以在处理程序中标记一些变量...但是有没有更好的方法来获取用户选择的选项?

我已阅读:https://developer.apple.com/library/ios/documentation/Uikit/reference/UIAlertController_class/index.html#//apple_ref/occ/instm/UIAlertController/addAction

但我仍然找不到解决方案。

请帮忙

【问题讨论】:

【参考方案1】:

swift 在处理警报视图/操作表时采用了一种新方法。当您将UIAlertAction 添加到您的UIAlertController 时,有一个名为handler 的参数。这是代码(称为闭包),当用户在您的操作表上选择其中一项操作时将调用该代码。 最终的代码可能看起来像这样

enum SortType 
    case PriceLowToHigh, Latest, PriceHighToLow


func sort(sortType: SortType) 
    //do your sorting here depending on type


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

alert.addAction(UIAlertAction(title: "Price: Low to High", style: UIAlertActionStyle.Default)  (_) -> Void in sort(SortType.PriceLowToHigh)  )

alert.addAction(UIAlertAction(title: "Latest", style: UIAlertActionStyle.Default)  (_) -> Void in sort(SortType.Latest)  )

alert.addAction(UIAlertAction(title: "Price: High to Low", style: UIAlertActionStyle.Default)  (_) -> Void in sort(SortType.PriceHighToLow)  )

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

您可以(并且应该)阅读更多关于闭包的信息here

【讨论】:

谢谢@kap...我会试试...你能解释一下如何使用'actions'变量吗? 不客气。你指的是哪个变量? class UIAlertController : UIViewController var actions: [AnyObject] get 命令单击 UIAlertController...您可以在 developer.apple.com 上阅读“操作”的描述 您根本不必使用它。只需添加操作并显示操作表。当用户点击按钮时,将调用相关代码 我了解您的解决方案...但是在我学习的过程中,我想知道变量的重要性...谢谢!

以上是关于返回 UIAlertControllerStyle.ActionSheet 中选择的动作的主要内容,如果未能解决你的问题,请参考以下文章

swift 弹出提示框

更改 UIAlertController 选择的按钮颜色

swift UIAlertController使用 UIAlertController的宽度 为270

Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

Kotlin 协程Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

使用fiddler修改返回值以及返回状态码