无法选择UIAlertController中按钮的顺序

10

我一直认为,如果普通操作是一项破坏性操作并且在其UIAlertController中另一个操作是取消操作,则破坏性操作应位于左侧,取消应位于右侧。

如果普通操作不是破坏性的,则普通操作应位于右侧,取消应位于左侧。

话虽如此,我有以下内容:

var confirmLeaveAlert = UIAlertController(title: "Leave", message: "Are you sure you want to leave?", preferredStyle: .Alert)

let leaveAction = UIAlertAction(title: "Leave", style: .Destructive, handler: {
        (alert: UIAlertAction!) in

        //Handle leave

    }
)

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)

confirmLeaveAlert.addAction(leaveAction)
confirmLeaveAlert.addAction(cancelAction)

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

我原来以为如果我先添加leaveAction,再添加cancelAction,那么leaveAction会成为左边的按钮。但事实并非如此。我也尝试过相反的顺序添加按钮,结果按钮的顺序仍然相同。

我错了吗?有没有办法做到这一点?

2个回答

9

我的解决方案是使用.Default样式而不是.Cancel样式来设置cancelAction


1
这是正确的。显然,iOS 喜欢把取消语义按钮放在首位。 - MattD

7
自iOS9以来,UIAlertController有一个preferredAction属性。它将行动放在右侧。从文档中可知: 当您指定首选操作时,警报控制器会强调该操作的文本以突出显示。(如果警报还包含取消按钮,则优先操作将接收突出显示,而不是取消按钮。) 分配给此属性的操作对象必须已添加到警报控制器的操作列表中。在使用addAction:方法添加它之前将对象分配给此属性是程序员错误。

这是我需要的:一个带粗体字的正面按钮放在右边,一个取消按钮放在左边,就像系统样式一样。 - migrant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接