私は本当にこれにまともな解決策がないことが信じられないことがわかります。
何らかの理由で、私はタグ付け方法を見つけ、他の答えに少し汚れている正しいモデルオブジェクトを特定するために画面上のセルの視覚的位置を使用します。
サブクラスUITableViewCellの
私はcellForRowAtIndexPath:
にサブクラスにUITableViewCellの
@interface MyCustomCell : UITableViewCell
@property (nonatomic, strong) Model *myModelObject;
@end
セルを作成したといったソリューションあなたは以下のとおりです。
は、ここで問題には2つの異なるアプローチですモデルオブジェクトを使用してセルデータを取り込む可能性があります。このメソッドでは、モデルオブジェクトをセルに割り当てることができます。
し、ボタンタップハンドラで:
MatchTile *cell = (MatchTile *) sender.superview.superview;
if (cell && cell.myModelObject)
{
//Use cell.myModelObject
}
私は正直に言うと、この溶液を用いて、100%満足していません。このような特殊なUIKitコンポーネントにドメインオブジェクトをアタッチするのは悪い習慣のようです。あなたはセルとモデルオブジェクトを関連付けると、後でそれを取得するために使用することができます詐欺の別のビットがあるセルをサブクラス化したくない場合は
使用のObjective-Cの連想は
オブジェクト。
モデルオブジェクトをセルから取得するには、セルを識別するために一意のキーが必要です。このようなものを定義します。あなたは、細胞を移入するモデルオブジェクトを使用しているとき
static char* OBJECT_KEY = "uniqueRetrievalKey";
は、あなたのcellForRowAtIndexPath:
メソッドに次の行を追加します。これにより、モデルオブジェクトとセルオブジェクトが関連付けられます。私はすでにセルをサブクラス化したいので、私は(最初を選んだものの、反射で
MyModelObject *myModelObject = (MyModelObject *) objc_getAssociatedObject(cell, OBJECT_KEY);
:その後、
objc_setAssociatedObject(cell, OBJECT_KEY, myModelObject, OBJC_ASSOCIATION_RETAIN);
とは、どこでも、あなたが使用してモデルオブジェクトを取得することができ、そのセルへの参照を持っています)、2番目の解決策はおそらく、モデルオブジェクトをアタッチして取得するためにViewControllerの責任を負うので、おそらく少し洗っています。UITableViewCellはそれについて何も知る必要はありません。
あなたはdidSelectRowを使用している:メソッドを? – tipycalFlow