2017-03-15 11 views
0

iOSアプリケーションで作業していて、文字列とUIImageViewsの2つのコンポーネントを含むPickerViewを表示する必要があります。私もするビューコントローラを割り当てたiOS viewDidLoadメソッドで使用されない式結果

viewDidLoad method

:View Controllerのクラス拡張では、私はNSArrayのいわゆる「スイート」UIImagesを保持し、viewDidLoadメソッドで配列を移入するために作成しましたPickerViewのデリゲートとデータソース私はPickerViewの二つの成分を識別するためのグローバル変数にしている:

#define numberComponent 0 
#define suiteComponent 1 

と、次のデリゲートメソッド実装しました:シミュレータで

- (UIView *)pickerView:(UIPickerView *)pickerView 
      viewForRow:(NSInteger)row 
      forComponent:(NSInteger)component 
      reusingView:(nullable UIView *)view 
{ 
    if (component == suiteComponent){ 
     UIImageView *imageView = (UIImageView *) view; 
     if(!imageView){ 
      imageView = [[UIImageView alloc] initWithImage: self.suites[row]]; 
     } 
     imageView.image = self.suites[row]; 
     return imageView; 
    } 
    else{ 
     UILabel *label = (UILabel *) view; 
     if(!label){ 
      label = [[UILabel alloc] init]; 
     } 
     label.text = self.numbers[row]; 
     return label; 
    } 
} 

を、UILabelsを含むピッカーコンポーネントがうまくレンダリングされます。 UIImageViewsを含有する成分は表示されません、と私はUIImagesの配列が使用されていないので、それは推測しています:

simulator

更新: 場合(コンポーネント== suiteComponent)内のブロック 決して到達されません。私の理解が正しければ

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

ので、UIPickerViewは、最終的に第二成分をレンダリングするためのデリゲートへの呼び出しを行う必要があります。私は、このデータソースのメソッドを持っています。しかし、私がそれをデバッグすると、デリゲートメソッドの行パラメータは0から4の間ですべての呼び出しにとどまり、コンポーネント変数は0にとどまります。

私は何か助けていただきありがとうございます!

+1

[このUIPickerViewに画像を配置するにはどうすればいいですか?](http://stackoverflow.com/questions/11298603/how-can-i-put-an-image-in-this-uipickerview) –

+0

これは適切な委任方法ではありません。 titleForRowはNSSTringを返します.YOuはviewForRowを使う必要があります! –

+1

質問ごとに1つの問題のみを投稿してください。 – rmaddy

答えて

0

これは、カスタムオブジェクトを開始する方法が間違っています。

あなたはこのようにそれを実行する必要があります。

self.suites = [[Suites alloc] initWithObjects:@[heart,club,spade,diamond]]; 

その後、uは適切self.suitesを使用することができます。私はあなたのカスタムオブジェクトクラス名が "スイート"であると仮定しました。その名前をカスタムクラス名に変更する必要があります。また、関数がNSArrayを受け入れると仮定して、リテラルのObjC配列@ [..]を作成します。

パラメータの受け渡しも不審です。パラメータを渡す際にオブジェクト型をキャストする必要はありません。カスタムクラスのinitWithObjects:宣言をチェックする必要があります。それは配列またはUIImageを入力すると宣言されていますか?

関連する問題