2009-09-07 31 views
20

Tôi có một UIPickerView với 3 thành phần được điền với 2 NSMutableArrays (2 thành phần có cùng một mảng).Nhận hàng đã chọn trong UIPickerXem cho mỗi thành phần

Một hướng dẫn nói:

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

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

Nhưng tôi muốn để hiển thị các hàng đã chọn cho mỗi thành phần trong một UIAlertViewsau khi người dùng chạm vào một UIButton.

Có cách nào để thực hiện việc này không? Hoặc tôi phải sử dụng 3 bộ đệm vô hình UILabels làm bộ đệm?

Xin cảm ơn trước.

Trả lời

46

Vì vậy, trong phương pháp button action, bạn có thể làm điều gì đó như thế này:

- (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); 
} 

Đây sẽ là cách thức tuyệt đối để lấy thông tin (bằng cách sử dụng các nguồn dữ liệu thích hợp và phương pháp đại biểu), nhưng nó có thể được dễ dàng hơn (tùy thuộc vào thiết lập của bạn), chỉ cần lấy hàng đã chọn và sau đó kéo thông tin ra khỏi mô hình của bạn trực tiếp, thay vì đi qua phương thức ủy nhiệm.

+2

Cảm ơn! selectedRowInComponent chỉ là những gì tôi cần. –

+2

Uhm, tại sao bạn sử dụng một số nguyên không dấu ở đây? - [UIPickerView selectedRowInComponent:] cũng có thể trả về -1 nếu không có hàng nào được chọn. – datwelk

+0

Cool .. !!! Nó hoạt động. – Siten

1

Swift 3 phiên bản:

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 
         } 
        } 
Các vấn đề liên quan