私のコードでは、ストーリーボード内に静的セルを含むテーブルがあります。最後の静的セルをクリックしたときにメソッドを起動しようとしています。
これを実現するには、コードに何を書く必要がありますか。エラーを発生させずにコード内の静的セルを参照するにはどうすればよいですか。
ViewControllerに次を追加します。
@property (nonatomic, weak) IBOutlet UITableViewCell *theStaticCell;
そのコンセントをストーリーボードのセルに接続します。
今 tableView:didSelectRowAtIndexPath
方法:
UITableViewCell *theCellClicked = [self.tableView cellForRowAtIndexPath:indexPath];
if (theCellClicked == theStaticCell) {
//Do stuff
}
静的セルを使用しても、- tableView:didSelectRowAtIndexPath:
を実装してindexPathを確認できます。 1つのアプローチは、特定のindexPathを#define
で定義し、選択された行がそのindexPathにあるかどうかを確認し、ある場合は[self myMethod].
を呼び出すことです。
これが静的セルと動的セルを混合するときの私の見解です。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let staticIndexPath = tableView.indexPathForCell(self.staticCell) where staticIndexPath == indexPath {
// ADD CODE HERE
}
}
これにより、新しいセルの作成が回避されます。私たちは皆、セルを作成し、それをcellForRowAtIndexPath
で構成するために使用されます
CiNNの回答に続いて、これは問題を解決するSwiftバージョンです。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let staticIndexPath = tableView.indexPath(for: OUTLET_TO_YOUR_CELL), staticIndexPath == indexPath {
// ADD CODE HERE
}
}
このアプローチでは、特にストーリーボードで静的セルを使用している場合は、cellForRowメソッドを実装する必要はありません。
あなたは私と同じ問題を抱えていたと思います。 tableView:didSelectRowAt
をオーバーライドするとエラーが発生し続けました。その理由は、super.tableView:didSelectRowAt
を呼び出すことに慣れているためですが、この場合はそうしたくありません。したがって、実行時エラーを回避するには、スーパークラスメソッドの呼び出しを削除してくださいだけです。