0

UITableViewControllerのサブクラスであるカスタムTablePickerViewControllerを作成しました。このクラスを使用して、カスタムタイプのTablePickerItemのオブジェクトのリストを表示しています。

iOSアプリケーションでTablePickerViewControllerを複数回使用して、ユーザーがアイテムを選択する必要があるさまざまな種類のリストを表示しています。その後、別のビューコントローラーMainViewControllerがこの選択に反応して、何かを実行する必要があります。

このプロトコルを作成し、TablePickerViewControllerにデリゲートプロパティを作成しました。

@protocol TablePickerViewControllerDelegate <NSObject>
- (void)tablePickerViewController:(TablePickerViewController *)controller
                    didSelectItem:(TablePickerItem*)item;
@end

MainViewControllerで新しいTablePickerViewControllerを設定すると、デリゲートとしても設定されます。これは、ユーザーがテーブルビューのセルをタップしたときに通知されるものです

問題は、MainViewControllerが異なるデータ(TablePickerItem )を使用して複数のTablePickerViewControllerをセットアップすることです。これらの複数のTablePickerViewControllerを処理するようにMainViewControllerをどのように設定する必要がありますか?それらのそれぞれからのイベントは、私のMainViewControllerで同じprotocol-methodを呼び出すことになります。

さらに、たとえばメソッドで動作するときに要素IDを知る必要があるため、 TablePickerItemtablePickerViewController:didSelectItemが表す要素を取得する必要があります。TablePickerItem@property (nonatomic) id elementにのようなものを追加し、元のオブジェクトをこのプロパティに設定してから作成することで、これを処理する必要がありますか?

私の解決策が間違った方法で行われているように思われる場合、誰かが私に一般的なテーブルビューコントローラを作成する方法の例を教えてくれるかもしれません。

4

1 に答える 1

0

セットアップについては完全にはわかりませんが、メインコントローラーにフィードバックする複数のピッカーがある場合は、ピッカーへの参照を作成できます。

// MainViewController.m

@interface MainViewController ()

@property (nonatomic, strong) TablePickerViewController *picker1;
@property (nonatomic, strong) TablePickerViewController *picker2;
// ... and so on. Obviously you know your problem domain so you can change
// the terrible naming above to something appropriate

@end

@implementation MainViewController


// ...

- (void)theMethodWhereYouSetUpYourPickers;
{
    TablePickerViewController *picker1 = [[TablePickerViewController alloc] init];
    picker1.delegate = self;
    self.picker1 = picker1;
    // ...
}

- (void)tablePickerViewController:(TablePickerViewController *)controller
                didSelectItem:(TablePickerItem*)item;
{
    if (controller == self.picker1) {
         NSLog(@"Something was picked in picker 1 %@", item);
    } else if (controller == self.picker2) {
         NSLog(@"Something was picked in picker 2 %@", item);
    }
}

// ...

@end
于 2012-04-22T14:10:46.967 に答える