2017-01-29 3 views
-1

Я нахожусь на OSX, Xcode 8.2, а не на iOS.Предотвращение повторного выполнения команды

Я открываю представление с помощью раскадровки segue (popover) при нажатии кнопки, а не программно.

В то время как popover «выскакивает», если вы нажимаете кнопку запуска быстро, segue вызывается несколько раз, открывая несколько popovers в одном и том же месте друг над другом.

Я бы хотел, чтобы popover не открывался дважды, если popover уже открыт. Какой был бы лучший способ сделать это?

Мой текущий подход заключается в том, чтобы сохранить активацию/открытие в BOOL в файле prepareForSegue и проверить его значение в shouldPerformSegue. Затем переменная сбрасывается самим представлением (при закрытии через делегат)

Но это не кажется чистым, поэтому мне было интересно, есть ли более эффективный способ выполнения этой задачи.

+0

Я не знаю о macOS, но вы не могли бы проверить что-то вроде '' if ((self.presentedViewController) 'или что-то в этом роде, так как вы называете« presentPopover или soemthing »? – Larme

ответ

0

удалить performSegueWithIdentifier и использовать в подготовкеForSegue что-то вроде этого;

let indexPath : NSIndexPath! = self.tableView.indexPathForSelectedRow 

я не знаю, как написать это в цель, но в стрижа я уверен, вы получите индекс, выбранный при использовании TableView, если у вас есть только кнопки, чтобы показать вид очень легко просто пойти в раскадровке и дать Differents имена каждого идентификатора после

правой что-то коммутатор Statement с идентификатором в случае

switch control expression { 

case identifier 1: 
    statements 

case identifier 2: 
    statements 

case identifier 3: 
    statements 

} 
or 

if identifier == "btn1"{ 
destinationForSegue : ControllerName1 

} 

if identifier == "btn2"{ 
destinationForSegue : ControllerName2 

} 

if identifier == "btn3"{ 
destinationForSegue : ControllerName3 

} 
+0

Aah. Вы указали на опечатку. Я использую prepareForSegue. Случайно написал performSegueWithIdentifier, что неправильно, потому что кнопка запускается, а не автоматически. Я редактировал свой первый пост. Я уже использую его так, как вы упомянули, но это не мешает многократным поползкам многократно нажимать кнопку. –

+0

, так что если вы используете переключатель, сделайте это один раз для щелчка, но используя «if», это может отправить множители, я думаю, – demopix

+0

У меня только одна кнопка - значит, у меня только один раз. Если вы нажмете кнопку повторяюще, ONE segue вызывается несколько раз - каждый раз при создании нового popover. Переключатель не имеет смысла. Я хочу, чтобы каждый popover после первого так открылся только один. Надеюсь, это делает его более ясным. –

0

попробовать этот

если (плохой действие1) {

сообщение этого нет бога, попробуйте еще раз

}

еще {

сделать свой персонал 1 если плохо action2 {

сообщения этого нет бога попробуйте еще раз

} 
else{ 
do your staff 2 
    if bad action3{ 
    message this no god try again  

    } 
    else{ 
    do your staff 3 or final staff 

    } 

} 

}

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