6

これまでのところ、事前に定義されたデザイン (ノーマル、サブタイトルなど) を持つプロトタイプ セルを実装する必要があるだけで、問題はありませんでした。

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

一般的な質問であることは承知していますが、ここでいくつかの指針をいただければ幸いです。誰かがドキュメントやチュートリアルなどについて知っているかもしれません。

事前に感謝します。

4

1 に答える 1

10

プロトタイプセルの使い方を理解するのにも時間がかかりました。プロトタイプ セル内のユーザー インターフェイス要素にアクセスする場合は、UITableViewCell のサブクラスを作成し、それを Interface Builder のプロトタイプ セルに割り当てる必要があります。次に、IBOutlet プロパティを手動で定義する必要があります。

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

その後、コントロールを押しながら要素からアシスタント ビューのプロパティ定義にドラッグすることで、インターフェイス要素を接続できます。代わりに、IBActions を所有する View Controller 内で定義できます。インターフェイス要素から View Controller ヘッダー ファイルにコントロールを押しながらドラッグして、アクションを作成できます。アクションの実装内で、どのセルがアクションをトリガーしていたかを知りたい場合があります。私はこのようにします:

@implementation SomeTableViewController

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

@end

対応するセルとインデックス パスを見つけるための別の解決策 (jrturton による):

- (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];
    ...
}

これは少し風変わりですが、これまでのところより良い解決策は見つかりませんでした。それが役立つことを願っています。

于 2012-04-21T11:47:51.743 に答える