2016-06-27 13 views
1

completionパラメータがpresentのタスクを実行しようとしました。その結果、UIAlertControllerが閉じられた後にのみ目的の機能が実行されます。ただし、警告が発生する前に関数が呼び出されました。アクションが実行されるまで関数の実行を待つにはどうすればよいですか?AlertControllerアクションが発生するまでタスクを停止します。Swift

let alert = UIAlertController(title: "Wild Card Played", message: "Choose your suit", preferredStyle : .alert); 
for suit in suits { 
    alert.addAction(UIAlertAction(title: suit, style: .default, handler: crazyEightPlayed)) 
        } 
self.present(alert, animated: true, completion: cpuTurn) //Upon completion call the cpuTurn() function 

答えて

1

問題は、現在の警告がユーザーに表示されたときに、ユーザが「オーケー」押されたときcpuTurnは、いないと呼ばれていることです。 documentation hereで見ることができるように、self.presentメソッドの完了関数は、プレゼンテーションが終了してから[実行]されます。このブロックには戻り値がなく、パラメータはありません。ユーザーにアラートが表示され、最初のUIViewControllerに「アラートの表示が完了しました」と表示され、cpuTurn関数が実行されます。

UIAlertActionのハンドラにコードを挿入したいと思うでしょう。すでに持っているようです。 crazyEightPlayed関数へのcpuTurnコールを移動する必要があります(または少なくともcrazyEightPlayedからcpuTurnを呼び出してください)

0

対話を持つビューのサブビューを無効にすることができます。私はそれらのサブビューに注意し、その後、それらのサブビューをアクティブにするだけです。

スイフト2:

var disabledSubviews = [UIView]() 

let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .Alert) 
alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) in 
    for subview in disabledSubviews { 
     subview.userInteractionEnabled = true 
    } 
})) 

self.presentViewController(alert, animated: true) { 
    for subview in self.view.subviews { 
     if subview.userInteractionEnabled == true { 
      disabledSubviews.append(subview) 
      subview.userInteractionEnabled = false 
     } 
    } 
} 

スウィフト3:

var disabledSubviews = [UIView]() 

let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert) 
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in 
    for subview in disabledSubviews { 
     subview.isUserInteractionEnabled = true 
    } 
})) 
self.present(alert, animated: true) { 
    for subview in self.view.subviews { 
     if subview.isUserInteractionEnabled == true { 
      disabledSubviews.append(subview) 
      subview.isUserInteractionEnabled = false 
     } 
    } 
} 
関連する問題