web-dev-qa-db-ja.com

各コンポーネントのUIPickerViewで選択された行を取得します。

私はUIPickerViewに3つのコンポーネントがあり、2つのNSMutableArraysが入力されています(2つのコンポーネントは同じ配列を持っています)。

チュートリアルは言う:

//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);
}

しかし、各コンポーネントの選択された行をUIAlertViewユーザーがUIButtonに触れた後に表示したいと思います。

これを行う方法はありますか?または、バッファとして3つの非表示のUILabelsを使用する必要がありますか?

前もって感謝します。

21
user142019

したがって、ボタンアクションメソッドでは、次のようなことができます。

- (IBAction) showAlert {
  NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView];

  NSMutableString * text = [NSMutableString string];
  for(NSUInteger i = 0; i < numComponents; ++i) {
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i];
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i];
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i];
  }

  NSLog(@"%@", text);
}

これは(適切なデータソースとデリゲートメソッドを使用して)情報を取得する絶対的な正式な方法ですが、(設定によっては)選択した行を取得してモデルから直接情報を取得する方が簡単な場合があります。 、デリゲートメソッドを経由する代わりに。

45
Dave DeLong

Swift 3バージョン:

var value = ""
for i in 0..<numberOfComponents {
    let selectedRow = pickerView.selectedRow(inComponent: i)
    if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) {
        value += s
    }
}
1
Roman Barzyczak