私は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
を使用する必要がありますか?
前もって感謝します。
したがって、ボタンアクションメソッドでは、次のようなことができます。
- (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);
}
これは(適切なデータソースとデリゲートメソッドを使用して)情報を取得する絶対的な正式な方法ですが、(設定によっては)選択した行を取得してモデルから直接情報を取得する方が簡単な場合があります。 、デリゲートメソッドを経由する代わりに。
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
}
}