0

ピッカー ビューといくつかのボタンを備えたナビゲーション バーを保持するカスタム UIView を作成しました。また、ナビゲーション バー、2 つのボタン、およびピッカーを備えたカスタム nib も作成しました。これらはすべてヘッダー ファイルにリンクされています。すべてのピッカー ビュー デリゲートを処理するために、個々のクラスごとにデリゲートを作成しました。私の問題は、必要なときに画面に表示されないことです。メソッドが呼び出されることはわかっていますが、カスタム ビューは表示されません。以下は私のコードです。

CustomPicker.m:

- (IBAction)selectClick:(id)sender
{
    NSObject *obj = [self.list objectAtIndex:[self.picker selectedRowInComponent:0]];
    [self.delegate pickerDidSelect:obj];
}

- (IBAction)selectCancel:(id)sender
{
    [self.delegate removePickerFromView:self];
}

- (id)initWithFrame:(CGRect)frame
{
    frame.size = CGSizeMake(320, 260);
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }

    self.picker = [[UIPickerView alloc] init];
    self.picker.dataSource = self;
    self.picker.delegate = self;
    self.picker.showsSelectionIndicator = YES;

    return self;
}

-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return [self.delegate numberOfComponentsInPicker:pickerView];
}

-(NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.delegate picker:pickerView numberOfRowsInComponent:component];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.delegate picker:pickerView titleForRow:row forComponent:component];
}

表示するために呼び出されるメソッド

-(void)displayPicker
{
    NSLog(@"display picker");
    picker = [[CustomPicker alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, 320, 260)];
#warning picker set up incomplete
    [self.view addSubview:picker];
    CGRect frame = picker.frame;
    frame.origin = CGPointMake(0, self.view.frame.size.height - 260);
    [UIView animateWithDuration:1.5 animations:^{
        [picker setFrame:frame];
    }];
}

さて、カスタム ビューが表示されない理由がわかりません。

ありがとう!

4

1 に答える 1

2

クラスの実装は、CustomPickerそれ自体にサブビューを追加しません。カスタム ピッカー ビューは適切に追加および表示されていますが、何も表示されていないため表示されません。

に追加するのinitWithFrame:メソッドを更新します。CustomPickerself.pickerself

[self addSubview:self.picker];

ところで-作成およびセットアップするコードは、ステートメントUIPickerView内で実行する必要があります。の場合、そのコードを実行したくありifません。selfnil

- (id)initWithFrame:(CGRect)frame
{
    frame.size = CGSizeMake(320, 260);
    self = [super initWithFrame:frame];
    if (self) {
        self.picker = [[UIPickerView alloc] init];
        self.picker.dataSource = self;
        self.picker.delegate = self;
        self.picker.showsSelectionIndicator = YES;
        [self addSubview:self.picker];
    }

    return self;
}
于 2013-08-26T21:40:37.747 に答える