2

私はモーダルviewcontrollerを表示します。このモーダルでは、ユーザが編集して提示された車を削除することができます。UIAlertcontrollerからモーダルViewControllerを解除するには

この車を削除したい場合、彼は本当にこの車を削除したいかどうか尋ねるために、警告のスタイルでUIAlertControllerを提示します。すべてうまく動作します。しかし、ユーザーが "はい"を選択した後も、私はまだmodal viewcontrollerにいます。

削除後にモーダルビューを解除するにはどうすればよいですか?

私は次のコードOKアクションの閉鎖で

self.parentViewController?.dismissViewControllerAnimated(true, completion: nil) 

self.navigationController?.popViewControllerAnimated(true) 

を試みたが、両方は私のために働いていませんでした。 :(

+0

dismissviewcontrollerビューを呼び出す方法は? (親ビューまたはナビゲーション)は、一部のスクリーンショットまたはコードを共有します。 –

+0

nishith Singhのソリューションは機能しましたか? –

+0

いいえ動作しませんでした –

答えて

1

はそのような

dispatch_async(dispatch_get_main_queue(), { //write your code here 

}) 

内にコードを置く:この意志はあなた

+0

メインスレッドでのディスパッチは、なぜこれがあなたのために機能するのかとは関係ありません。あなたが 'self.dismissViewControllerAnimated()'と呼んでいるという事実は、実際に問題を解決しているものと推測します。 – Mike

+0

はい@そうですね。メインスレッドはここでの解決策ではありません。彼がそれを却下する方法でなければならない。 – haresh

2

のために働く

func showDeleteWarningAndDeleteEntity() { 

    dispatch_async(dispatch_get_main_queue(), { 

     let deleteController = UIAlertController(title: "Delete car", message: "Are you sure?", preferredStyle: .Alert) 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { 
     (action) in 
    } 
    let okACtion = UIAlertAction(title: "Yes", style: .Destructive) { 
     (action) in 
     //some network stuff happens here... 

     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
    deleteController.addAction(okACtion) 
    deleteController.addAction(cancelAction) 
    self.presentViewController(deleteController, animated: true, completion: nil) 
    }) 

} 

希望

にコードを記述する理由はありません
dispatch_async(dispatch_get_main_queue(), { //write your code here 

}) 

ab oveコードはメインスレッドの作業に使用されます。しかし、ここであなたはすでにメインスレッドにいます。

ここでの問題は、あなたはそれがself

で却下することができます唯一のよう selfコントローラ上 AlertControllerを提示しているのでちょうど

self.dismissViewControllerAnimated(true, completion: nil) 

を書く代わりに、それの

self.parentViewController?.dismissViewControllerAnimated(true, completion: nil) 

を呼び出していますさ

+0

次のリンクを確認して、探している理由が分かるかもしれません:http://stackoverflow.com/questions/37488918/uialertcontroller-does-not-show-immediately – Anuj

+0

Ok dispatch_get_main_queue()は常に問題なく動作します。しかし、私たちのスレッドがバックグラウンドにあり、メインスレッドのUIを変更したい場合にのみ使用してください。あなたのリンクで、彼は非常に長い操作をしていました。バックグラウンドスレッドで常に行われていました。 dispatch_get_main_queue()で宣言します。メインスレッドの長いプロセスとしてこのメ​​インスレッドブロックを使用するには、UIをブロックしてデバイスをハングアップさせることができます。 – haresh

+0

あなたはOKボタンのアクションのためにFoxが実装しているコードや処理方法を知っていますか?そして、彼はすでにその自己を言及した。dismissViewControllerAnimated(true、completion:nil)が彼のために働いていないので、okボタンのアクションでバックグラウンドで実行されているコードを持っていなければならないので、私は彼にdispatch_get_main_queue()を使用するよう勧めます。私は、あなたがなぜそのソリューションの仕事の理由を理解したくないと思っているのか、それほど厳格ではないことを理解していません。あなたが解決策が気に入らなければ、助けてください。 – Anuj

関連する問題