2016-03-18 2 views

ответ

0

Невозможно удалить действия с добавленного UIAlertController.

Свойство actions может возвращать массив добавленных действий, но только get и не может быть установлен.

Действия добавляются с помощью метода addAction(_:), но не существует соответствующего метода removeAction(_:).

И, в конечном счете, на самом деле не обязательно иметь смысл снимать действия с контроллера предупреждения после добавления. Обычно вы должны повторно использовать объект контроллера предупреждений после создания экземпляра, поэтому решение состоит в том, чтобы просто добавлять только соответствующие действия в первую очередь.

-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() 
    } 
} 
+0

Вы не можете подклассифицировать UIAlertController. [Apple Docs] (https://developer.apple.com/documentation/uikit/uialertcontroller) говорят: ** Важно ** ** Класс UIAlertController предназначен для использования как есть и не поддерживает подклассы , Иерархия представления для этого класса является частной и ее нельзя изменять. ** – Austin

0

Поскольку вы не можете удалить действия, есть простой «грязный» способ. Создание нового предупреждения:

// 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; 

Конечно, лучший способ - не добавлять действие, которое вы хотите удалить в первую очередь.

Смежные вопросы