iOSはネットワークカートンがbuttonまたはcellをクリックして何度もpushのバグを解決するため
1862 ワード
需要
社内ネットワークのテスト環境は、ネットワークが制限されているため、カードを比較するため、
button
またはcell
を連続的にクリックすると、push
コントローラが複数回クリックされる可能性がある.コード変更範囲の最小範囲でこの問題を解決するにはどうすればいいですか?方法一(推奨しない)
+
を用いるButton
のクリック方法を置き換える、
を設け、クリック後にタイマーをオンにし、ボタンのenable
属性をオフにし、計時完了後にenable
を開くことができる.cell
についてはしばらく良いアイデアはありません.メリット:
方法2(問題を解決できるが、優雅ではない)
一般的に、私たちのネットワーク要求フレームワークは
から3層AFN
まで、大量のblockをネストすることによって一連の
の仕事を完成する.したがって、現在クリックするid
およびbutton
を記録するグローバルcell
変数を設定することができ、最下層のネットワーク要求が開始されると、このボタン/cellのenable
を閉じ、成功すると再び開くことができる.メリット:
方法3(推奨)
UINavigationController
のうちのpush
を制御方法は、コードが簡単で、現在のコントローラと押し込まれたコントローラが
であるかどうかを判断するだけでよい.しかし、class
と同じコントローラがほしいと思っていたら気まずいという欠点がある.コードは次のとおりです. - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//cell push
if (![[super topViewController] isKindOfClass:[viewController class]]) { // ,
[super pushViewController:viewController animated:animated];
}
}
方法四(強く推奨)
リンク、この先輩のやり方は巧みで、私の上の
push
も解決しました.override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
if let navigationController = navigationController {
guard navigationController.topViewController == self else {
return
}
}
super.performSegueWithIdentifier(identifier, sender: sender)
}