2012-04-21 4 views
6

これまでは、プロトタイプのセルを事前定義されたデザイン(通常、字幕など)で実装するだけで済みましたが、これは問題ではありませんでした。UIControlsが入ったiOSプロトタイプセル

私は、セグメント化されたスイッチ、スイッチなどのいくつかのコントロールを含むプロトタイプセルを実装する必要があります。問題は、トリガされたアクションがどのように実装され、どのようにコントロールに関連しているかを知ることができなかったことです。また、私は、単一のUITableViewController内の異なるプロトタイプセルがどのように実装されているかの例を見つけられませんでした。

私はそれが一般的な質問の種類だと知っていますが、私はここでいくつかの指摘を感謝します。おそらく、誰かが何らかのドキュメンテーション、チュートリアルなどについて知っているかもしれません。どんな助けもしてくれるでしょう。

Thanaks in advance。

答えて

11

プロトタイプのセルの使い方を理解するのにもしばらく時間がかかりました。プロトタイプセル内のユーザーインターフェイス要素にアクセスするには、UITableViewCellのサブクラスを作成し、それをInterface Builderのプロトタイプセルに割り当てる必要があります。 次に、あなたがコントロールドラッグアシスタントビューのプロパティ定義に素子からのインターフェイス要素を接続することができ、手動例えばIBOutletプロパティを定義する:その後

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

有します。 代わりにIBActionsを所有しているView Controller内で定義することができます。インターフェイス要素からView Controllerヘッダーファイルにドラッグ&ドロップしてアクションを作成できます。アクション実装の中で、どのセルがアクションを引き起こしているのかを知りたいと思うでしょう。対応するセルおよびインデックスパスを(jrturtonによって)発見するための

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

別の解決策:

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

これは少し風変わりですが、私はよりよい解決策を見つけていない私はこのようにそれを行いますこれまでのところ。希望が役立ちます。

+1

数分前、私はこのビデオ(およびその2番目の部分)を見つけました:http://youtu.be/0AsChJk422c多かれ少なかれ説明したが、彼/彼女はデリゲートを使用します。同じ原理ですが、もう少しきれいに見えます。ご回答有難うございます ! – Marcal

+0

これは確かにクリーンなソリューションです。ポインタありがとう。すべてのプロトコルのための定型コードのビットですが。 – Sbhklr

+1

コントロールの行を見つけるより良い方法は私の答えはここにあります:http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton