我知道您可以在UIAlertController中禁用UIAlertAction按钮,但是一旦添加按钮就可以完全删除它吗?
答案 0 :(得分:4)
一旦添加,就无法从UIAlertController
删除操作。
actions
属性可以返回已添加操作的数组,但仅为get
且无法设置。
使用addAction(_:)
方法添加了操作,但没有相应的removeAction(_:)
方法。
最终,添加后从警报控制器删除操作并不一定非常有意义。您通常应该在实例化后重用警报控制器对象,因此解决方案只是首先添加适当的操作。
答案 1 :(得分:2)
由于您无法删除操作,因此有一种简单的“脏”方式。创建新警报:
// Objective-C
UIAlertController *replacingNewAlert = [UIAlertController alertControllerWithTitle:yourOldAlert.title message:yourOldAlert.message preferredStyle:yourOldAlert.preferredStyle];
NSMutableArray* mutableActions = yourOldAlert.actions.mutableCopy;
// remove any unwanted actions here ...
for (UIAlertAction *action in mutableActions) {
[replacingNewAlert addAction:action];
}
yourOldAlert = replacingNewAlert;
当然,最好的方法是首先不要添加要删除的操作。
答案 2 :(得分:-1)
您可以改为以这种方式实现从UIAlertController
派生的自定义类,而是使用它。您基本上将操作设置推迟到UIAlertController
,而是捕获派生类中的操作项,并在viewDidLoad
中将您保存的操作设置为操作UIAlertController
'行动。
public class MutableUIAlertController : UIAlertController {
var mutableActions:[UIAlertAction] = []
override public func addAction(action: UIAlertAction) {
mutableActions.append(action)
}
public func removeAction(action:UIAlertAction) {
if let index = mutableActions.indexOf(action) {
mutableActions.removeAtIndex(index)
}
}
override public func viewDidLoad() {
for action in mutableActions {
super.addAction(action)
}
super.viewDidLoad()
}
}