0

tab_1、tab_2、tab_3、および tab_T の 4 つの配列を持つクラスがあります。ピッカーのデリゲートとデータソースを self (配列を含むクラス) に設定します。

テキストフィールドの編集が開始されると、ピッカーが呼び出されます。キーボードが表示されないようにするために NO を返します。代わりに、ピッカーをアニメーション化するメソッドがあります。

どのテキストフィールドに触れたかに応じて、次のようにします:tab_T=tab_1; または2または3

私の意見では、この割り当てにより、tab_T がピッカーのデータソースになります。この割り当ては本当に配列 tab_T をデータソースにバインドしていますか? 手動で割り当てる方法はありますか? きっとあるよ。しかし picker.datasource=tab_1 は機能しません。「警告: クラス 'NSMutableArray' は 'UIPickerViewDataSource' プロトコルを実装していません」というメッセージが表示されました。

それは私の最初のアプリかもしれませんが、アプリの初期の段階で行った手順を忘れている可能性があります。

お手伝いいただける方、お待ちしております。

ワロウ

4

1 に答える 1

2

UIPickerViewのデータソースは、UIPickerViewDataSourceプロトコルを実装するクラスである必要があります。ピッカービューの入力は、次の2つの方法で行われます。

– numberOfComponentsInPickerView:  
– pickerView:numberOfRowsInComponent: 

NSArrayは以下を使用してプロトコルを実装しないため:

pickerView.datasource=someArray;

...アレイがプロトコルを実装していないというエラーを生成します。

最初に行う必要があるのは、コントローラーが次のようなプロトコルを実装していることを宣言することです。

@interface MyControllerClass: UIViewController <UIPickerViewDataSource,UIPickerViewDelegate> 

次に、次のようなプロトコルのメソッドを実装する必要があります。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1; //or whatever
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [self.tab_T count]; // assuming just one component
}

実際にコンポーネントにデータを入力するには、UIPickerViewDelegateメソッドが必要です。(データソースはデータを提供する必要があるようですが、何らかの理由で逆方向にデータを提供しているようです。)

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [self.tab_T objectAtIndex:row]; //assuming one component
}

ここでの重要なアイデアは、データソースメソッドとデリゲートメソッドを実装するオブジェクトが、ピッカーと実際にデータを保持するデータ構造との間のインターフェイスとして機能することです。この場合、単純な配列ですが、Core Data、SQL、またはURLからダウンロードされたものであれば何でもかまいません。

pickerviewは、データ構造を直接処理することはありません。相互作用を行うのは、常にデータソースとデリゲートメソッドを実装するオブジェクトです。

于 2010-06-03T15:57:02.120 に答える