2009-05-01 35 views
69

Tôi có một ứng dụng cơ sở dữ liệu iphone tải UIPickerView với dữ liệu từ một bảng. Tôi muốn đặt hàng đã chọn thành một hàng cụ thể từ dữ liệu trong bảng khác. Ví dụ:Chọn hàng Sau khi UIPickerView được tải

Ví dụ: Cho phép tôi có UIPickerView được tải bằng số X tên người dùng iPhone (số tên biến, có thể là 1 hoặc 1000 và tất cả được nhập vào DB bởi người dùng) . Người dùng iPhone có một thiết lập ưu tiên mà người bạn thân nhất hiện tại của họ là TED. Tôi muốn UIPickerView được đặt ở vị trí TED khi được hiển thị.

Tôi gọi số selectRow ở đâu?

Tôi đã thử trong viewDidAppear nhưng nó không bao giờ được gọi là, trong titleForRow gây ra tất cả các loại hành vi lạ. viewDidLoadviewWillAppear nằm ngoài câu hỏi vì tôi không biết nguồn dữ liệu nào được chọn cho bộ chọn.

Xin cảm ơn trước.

+0

Chỉ cần đặt mã @jab trong câu trả lời của mình sau khi nạp dữ liệu và đưa ra đại biểu. Đó là những gì làm việc cho tôi! –

Trả lời

134

Gọi sau khi bạn truy xuất dữ liệu. Tôi không biết nơi bạn tải dữ liệu vì vậy đây chỉ là một mockup của những gì nên làm việc. Nếu điều này không có ý nghĩa, cho tôi biết nơi bạn đang tải dữ liệu vì vậy tôi có thể mảnh nó lại với nhau trong đầu tôi :)

-(void)viewDidLoad 
{ 
    // load data from sql 
    // self.someDataArray = DATAFROMSQL 
    [picker reloadAllComponents]; 
    [picker selectRow:0 inComponent:0 animated:YES]; 
} 
+0

Cảm ơn, tôi đang lấy lại dữ liệu trong viewDidLoad giống như mô hình của bạn. Tôi đã phải tạo một phương pháp để liệt kê thông qua danh sách để tìm chỉ mục phù hợp rồi đặt bộ chọn. Tôi nghĩ có lẽ tôi đã bỏ lỡ một cuộc gọi lại có thể được sử dụng sau khi bộ chọn đã được tải và trước khi trở về vòng lặp sự kiện. –

+0

nó hoạt động, nhưng tại sao nó gây ra rất nhiều tụt hậu khi tải chế độ xem? (trong tình huống thanh tab) – CularBytes

7

Nơi này bất cứ nơi nào bạn khởi tạo UIView chứa UIPickerView của bạn như là một subview:

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO]; 
39

Có một vấn đề phổ biến khi một mục UIPickerView (mặc định) cần phải được chọn khi UIPickerView được hiển thị ban đầu. Vấn đề liên quan đến chuỗi sự kiện. Từ việc đọc các bài viết trước, có vẻ như [pickerView selectRow: n] thường được gọi trong sự kiện ViewDidLoad của bộ điều khiển xem. Tuy nhiên, dữ liệu UiPickerView chỉ được tải sau sự kiện ViewDidLoad, có nghĩa là mọi mã lựa chọn trong ViewDidLoad sẽ không có hiệu lực. Để khắc phục, hãy đặt mã lựa chọn trong ViewDidAppear;

- (void) viewDidAppear:(BOOL)animated { 
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; } 
4

Tôi vừa phát hiện ra rằng trên 4.3 SDK, hành vi tải thành phần khác nhau giữa iPhone và iPad. Trên iPhone, tôi chuẩn bị gọi selectRow: ngay sau khi khởi tạo khung nhìn trước hoặc sau khi thêm vào phân cấp phân lớp. Tuy nhiên, trên iPad, cuộc gọi selectRow không mang lại kết quả nào. Tôi vết thương bằng cách sử dụng một performSelector: withObject: afterDelay: gọi để chờ 0,1 giây trước khi kích hoạt selectRow: inComponent: animated :. Điều này có kết quả dự đoán được trên iPhone và iPad.

0

Nếu bạn muốn các hàng đã chọn vĩnh viễn nhấn mạnh sử dụng này

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor; 
1

Đối nhanh chóng nó chỉ đơn giản là

self.picker?.selectRow(0, inComponent: 0, animated: true) 
Các vấn đề liên quan