2017-01-11 4 views
1

私はカスタムUITableViewCell(ストーリーボードデザイナー内のレイアウト用のXIBと一緒に)を作成しました。私は親テーブルビューがdidSelectRowAtIndexPathをトリガすることによってどのようにセル選択を通知するのか理解していますが、セル自体の中でセルの選択を捕らえる方法を理解できないようです。誰かがここに正しい方向に向けることができますか?私はXCode 8とSwift 2を使っています。ありがとう!ここでセル内からカスタムセルを選択すると検出されますか?

は、セルが選択されたときに処理するためのスタブ機能と私の単純なカスタムセルクラスである:あなたがそのような何かをする必要がありますなぜ、細胞の選択がで扱うことができ

class MyCustomCell: UITableViewCell { 
    func didSelect(indexPath: NSIndexPath) { 
    // perform some actions here 
    } 
} 
+0

なぜあなたは、セル**内で**から選択されたセルを検出する必要がありますか?これは 'UITableViewDelegate'の動作です。これは、デフォルトの_UITableViewCell_クラスからは行われません。したがって、カスタムセルクラスでこの動作をする必要はありません。単に 'UITableViewDelegate'のメソッドを使い、カスタムクラスのカスタムメソッドを呼び出してください。それでおしまい。シンプルでクリーン – nayem

+0

提案が歓迎:私は、私はトリガーしたいビューのいくつかのセグを別のビューにカプセル化したいxibを持ったカスタムセルクラスを持っています。セル自体が選択されています。このカスタムセルをテーブルビューに動的に追加して、テーブルビュー/デリゲートを強制的にセル選択とそれに続く別のビューのカプセル化セグおよびプレゼンテーションのトリガーを管理しないようにしたいと思います。カスタムセルとその振る舞い、セグ、他のビューの表示などは、すべてテーブルビューでワイヤーアップやメソッド/コールバック/ etcを行うことなく処理する必要があります。私は何が欠けていますか? – Paul

+0

Hmmm。今私はあなたの目的を理解しています。下の私の答えを見てください:[リンク](http://stackoverflow.com/a/41584111/3687801)。私はこれがあなたの受け入れられた答えよりもあなたを助けることを願っています。 – nayem

答えて

1

あなたができることは、UITableViewでdidSelectRowAtIndexPathを聞いて、セル内の関数を呼び出します。ここでは例です:次に

class MyCustomCell: UITableViewCell { 
    func didSelect(indexPath: NSIndexPath) { 
     // perform some actions here 
    } 
} 

、あなたのdidSelectRowAtIndexPathに:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell { 
     cell.didSelect(indexPath: indexPath) 
    } 
} 
0

かなりわかりませんUITableViewDelegate。あなたのセルクラス内のコードを持つことを主張場合は、あなたのようなデリゲートメソッドdidSelectRowAt内部didSelectを呼び出すことができます。通常

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    (tableView.cellForRow(at: indexPath) as? MyCustomCell).didSelect(indexPath) 
} 

選択を処理するためのコードは、このメソッド内に直接表示されますが、あなたは次のようにあなたのセルを呼び出すことができます私は上記のやり方をしました。

1

わかりました。私はあなたが何を意味したのか理解しているセルが他の場所から選択されている場合は、カスタムクラス内から何らかのアクションを実行する必要があります。右?

UITableViewCellクラスには、isSelectedというプロパティがあります。BOOLタイプです。参照:Apple Documentation Link

自己を呼び出して、このプロパティが真/偽であるかどうかを確認できます。その後、あなたのクラスであなたの望む行動を実行することができます。

ここではObjective-Cの例を示します。しかし、私は誰もがこれを取得することができると思う:迅速で、それは自動的にあなたがどこからでも自分のセルを選択するたびに呼び出されます。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
    if (self.selected) { 
     NSLog(@"Whoa you selected a cell"); 
     // or perform your desired action 
    } 
} 

ここ- (void)setSelected:(BOOL)selected animated:(BOOL)animated方法は、(hereを確認してください)setSelected(_:animated:)と同等です。

関連する問題