如何从Swift中的UIAlertController中删除UIAlertAction?

时间:2016-03-18 15:58:44

标签: ios uialertcontroller

我知道您可以在UIAlertController中禁用UIAlertAction按钮,但是一旦添加按钮就可以完全删除它吗?

3 个答案:

答案 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()
    }
}