2011-12-22 38 views
49

click here for a mockup I made of the US/can/mex picker view http://i39.tinypic.com/b7kpyq.jpgLàm cách nào để tải lại/làm mới UIPickerView (với mảng dữ liệu mới) dựa trên nhấn nút?

NẾU tôi muốn có bộ chọn, cho tiểu bang/tỉnh, tôi chưa thấy ví dụ, nhưng tôi đã giả mạo hiển thị trong liên kết ở trên, bộ chọn cho US/Can/Mex. tự hỏi bạn có thể tự động chuyển đổi NSMutableArray cho UIPickerView và sau đó có nó bằng cách nào đó tải lại mỗi khi bạn nhấp vào US/Can/Mex nút ??? Làm thế nào để tôi làm việc này. Tôi có cách tiếp cận nào. Tìm kiếm một người nào đó để chỉ một người mới bắt đầu cho một đầu mối đi đúng hướng.

Trả lời

102

Bạn sẽ phải triển khai nguồn dữ liệu và đại biểu.

khi bạn nhấn một nút, đặt con trỏ mảng thành mảng thích hợp.

hơn gọi [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{ 
    self.inputArray = self.usArray; 
    [self.thePicker reloadAllComponents]; 
} 

-(IBAction) mexicoButtonPressed:(id)sender{ 
    self.inputArray = self.mexicoArray; 
    [self.thePicker reloadAllComponents]; 
} 

các phương pháp nguồn dữ liệu:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 


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

các phương pháp đại biểu:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [self.inputArray objectAtIndex:row]; 
} 
+0

Cảm ơn đã chỉ cho tôi đi đúng hướng. Tôi là một người mới. Ok tuyệt vời để xem có một phương pháp lớp học cho nó. và rằng nó "Gọi phương thức này làm cho khung nhìn bộ chọn truy vấn đại biểu cho dữ liệu mới cho tất cả các thành phần" rất mát mẻ. Trình chọn giao diện người dùng hiện tại của tôi có phương thức nguồn và ủy nhiệm :-) để điều đó tốt. Tôi đang sử dụng một cuốn sách, không biết câu trả lời là đúng trong các phương pháp thể hiện của tài liệu Lớp. Cảm ơn một lần nữa. – jim4iOS

+0

cảm ơn người đàn ông! nó rất hữu ích! – fabersky

2

Sử dụng nhiều hái, hoặc sử dụng một khối chuyển đổi để xác định dữ liệu cần được tải và tải lại bộ chọn.

12

Swift: xcode 6.1

// tải lại các thành phần của bảng chọn (sử dụng này bên trong hành động kích hoạt hoặc nút)

self.pickerControl.reloadAllComponents(); 
+0

điều này không trả lời được câu hỏi nào cả. – vikingosegundo

4

Bằng cách gọi

thePicker.delegate = self; 

một lần nữa, tôi đã có thể để buộc làm mới pickerview với thông tin mới

+1

nhanh chóng 3, điều này làm việc. –

2

Trong thao tác nhấn nút,

[self.pickerView selectRow:0 inComponent:0 animated:YES]; 
2

Trong nhanh chóng 3 trong xcode-8 bạn chỉ cần viết trong chức năng didSelectRow như dưới đây

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 


     self.view.endEditing(false) 
     yourPickerView.selectRow(0, inComponent: 0, animated: true) 
     yourPickerView.reloadAllComponents(); 

} 
Các vấn đề liên quan