2017-05-16 3 views
1

UIPickerViewをサブクラス化しようとしていますが、メインビューにロードしていません。ここでiOS:メインビューにUIPickerViewをサブクラス化しないでください。

は私のコードです:

//Picker.h: 
@interface Picker : UIPickerView 

- (id)initWithFrame:(CGRect)frame; 

//Picker.m: 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
    } 
    return self; 
} 

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    return 3; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    return @"bla"; 
} 

この私のViewController上のコード:

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:YES]; 
    self.myPicker = [[Picker alloc] initWithFrame:self.view.frame]; 
    [self.view addSubview:_myPicker]; 
} 

ピッカーが私の見解にロードされていないなぜあなたのどれもが知っていますか?

本当にありがとうございます。

+0

'viewDidAppear:'が実行されていることを確認しましたか?ピッカーのデータソースを設定しましたか? (もしそうでなければ、データソースとして自分自身を使用したいと思うようですが、これは珍しいですが、もしそうなら 'initWithFrame'でこれをしたいかもしれません)?エラーが記録されますか? –

+0

@op plsは私の答えを参照してください。 – GeneCode

答えて

1

まず、<UIPickerViewDelegate, UIPickerViewDataSource>をPicker.hのヘッダーに追加します。

次に、独自のPickerオブジェクトに代理人を割り当てます。

-(id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 
    if (self) { 
     self.delegate = self; // <-- add this line 
    } 
    return self; 
} 
関連する問題