16

私は、選択肢a、選択肢b、選択肢cなどの選択肢を持つようにa設定UIPickerViewます。私はAppleのサンプルコードを解釈しようとしましたが、私のような初心者にとってはそれを理解するのは非常に難しいようです。また、可能であれば、ピッカービューからの選択肢で別のページに移動したいと思います。

4

3 に答える 3

48

すべての初心者にとって、これらのことを最初に理解するのは非常に面倒であることは明らかです。

とにかく、sの使い方を知っていますかUITableView?と の使い方を知っていますUITableViewDelegateUITableViewDataSource?答えが「はい」の場合は、UIPickerViews が s に似ていると想像してくださいUITableView(ただし、s ではないことに注意してくださいUITableViewController)。

たとえば、私はUIPickerView:

UIPickerView *objPickerView = [UIPickerView new];  // You need to set frame or other properties and add to your view...you can either use XIB code...

1) まず、IB またはコードを介してdelegatedataSourceをに割り当てる必要があります。UIPickerViewそれは実装に依存します (つまり、このステップは a に非常に似てUITableViewいますよね?)

このような:

objPickerView.delegate = self; // Also, can be done from IB, if you're using
objPickerView.dataSource = self;// Also, can be done from IB, if you're using

2) 次に、次のようにセクション数を定義する必要があります。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
     return 1;  // Or return whatever as you intend
}

2) 次に、必要な行数を定義する必要があります。

- (NSInteger)pickerView:(UIPickerView *)thePickerView 
numberOfRowsInComponent:(NSInteger)component {
     return 3;//Or, return as suitable for you...normally we use array for dynamic
}

3)次に、行のタイトルを定義します(複数のセクションがある場合は、各セクションのタイトル):

- (NSString *)pickerView:(UIPickerView *)thePickerView 
             titleForRow:(NSInteger)row forComponent:(NSInteger)component {
     return [NSString stringWithFormat:@"Choice-%d",row];//Or, your suitable title; like Choice-a, etc.
}

4) 次に、誰かが要素をクリックしたときにイベントを取得する必要があります (他のコントローラー/画面に移動したい場合):

- (void)pickerView:(UIPickerView *)thePickerView 
      didSelectRow:(NSInteger)row 
       inComponent:(NSInteger)component {

//Here, like the table view you can get the each section of each row if you've multiple sections
     NSLog(@"Selected Color: %@. Index of selected color: %i", 
     [arrayColors objectAtIndex:row], row);

     //Now, if you want to navigate then;
     // Say, OtherViewController is the controller, where you want to navigate:
     OtherViewController *objOtherViewController = [OtherViewController new];
     [self.navigationController pushViewController:objOtherViewController animated:YES];

}

必要な実装はこれだけです。

于 2012-12-07T04:11:20.453 に答える
9

プログラムでそれを実現する方法を簡単に説明します

- (void)viewDidLoad {
    [super viewDidLoad];

    UIPickerView * picker = [UIPickerView new];
    picker.delegate = self;
    picker.dataSource = self;
    picker.showsSelectionIndicator = YES;
    [self.view addSubview:picker];
}

- (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 {
    NSString * title = nil;
    switch(row) {
            case 0:
                title = @"a";
                break;
            case 1:
                title = @"b";
                break;
            case 2:
                title = @"c";
                break;
    }
    return title;
}

基本的に、viewDidLoadを作成してビューに追加し、コントローラーがとUIPickerViewの両方として機能することを伝えます(Interface Builder でもこれを行うことができます)。delegatedataSource

次に、pickerView に含まれるコンポーネントの数とコンポーネントごとの行数をそれぞれ示すために、2 つのデータ ソース メソッドを実装しますnumberOfComponentsinPickerView:pickerView:numberOfRowsInComponent:

pickerView:titleForRow:forComponent:最後に、すべての行の内容を返すデリゲート メソッドを実装しています。

行が選択されたときの動作をカスタマイズしたい場合はpickerView:didSelectRow:inComponent:、その名前が示すように、行が選択されるたびに呼び出されるデリゲート メソッドを実装できます。

于 2012-12-07T04:14:38.630 に答える
4

UIPickerView は、UITableView の使用と同様のパーテンを使用します。DataSourceDelegateプロトコル。

メソッドは、DataSourceピッカーに「列」と「行」がいくつあるかをピッカーに伝えるために使用されます。
メソッドはDelegate残り、行の高さ、列の幅、表示するビューまたはタイトル、およびピッカーが移動したときのコールバック用です。
UIPickerView

于 2012-12-07T04:00:16.597 に答える