以下のコードは、ユーザーがテーブルビューで行をタッチしたときにプログラムによって表示コントローラを表示します。コードは 'didSelectRowtIndex'パスにあり、テーブルビューはViewControllerクラスにあり、ここではテーブルビューデリゲートを実装しています。私が抱えている問題は、表示しようとしているビューコントローラがテーブルビュー行の2番目のタッチにしか表示されないということです。ただし、親ビューコントローラが最初に読み込まれると、最初のタッチで表示されます。以下子ビュー・コントローラのうちの2つのプレゼンテーションのための「didSelectRowAtIndexPath」内のコードは次のとおりViewControllerプレゼンテーションSwift 3
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
let stockTable = StockTableVC()
self.present(stockTable, animated: false, completion: nil)
}
else indexPath.row == 1 {
let accountTable = AccountTableVC()
self.present(accountTable, animated: false, completion: nil)
}
...
どちら上記行選択時に毎回呼び出されているが、上somtimes提示されていない現在ビュー・コントローラ・メソッド最初の選択(または少なくとも表示されません)。この謎の助けがあれば、どんな助けにもなります。
-お問い合わせ
ありがとう、上記の行選択解除ソリューションはうまく動作しますが、問題がある場合は後者を試してみます。 – jdeckman
遅延が0.1を超えるとどうなりますか?アプリがクラッシュします。行の選択を解除するよりも、これを使用するのが最も推奨されるのはなぜですか? –
@JuanCurtiタイミングに関してではありません。それはスレッドについてです。従って、より短い遅延でさえ確実に機能する。ここで使用しているテクニックは、メインスレッドを終了してrunloopを完了させ、次のrunloopのメインスレッドに戻ることです。私たちは、 'didSelect'メソッドが完了して呼び出しスタック全体が終了することを保証しています。なぜなら、それまではメインスレッドに戻ることができないからです。そしてその時点で、その時点で_only_、私たちはプレゼンテーションを開始するのは安全です。 – matt