2009-04-20 35 views
21

Tôi muốn tạo 2 bộ chọn riêng biệt trong cùng một chế độ xem bằng cùng một viewController. Nhưng làm cách nào để tôi đặt các đại biểu và nguồn dữ liệu riêng cho họ?Nhiều PickerViews trong một Chế độ xem?

Dường như không làm cho nó hoạt động. Chúng hiển thị cùng một dữ liệu. Nếu bạn có bất kỳ mã mẫu trên này, nó sẽ được nhiều đánh giá cao.

Cảm ơn.

Trả lời

32

Lưu ý rằng mỗi phương pháp của cả hai nguồn dữ liệu và các giao thức đại biểu chứa một tham số UIPickerView *, ví dụ:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

Bạn cần phải sử dụng nó để phân biệt giữa hai trường hợp của bạn, như sau:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 

    if([pickerView isEqual: pickerOne]){ 
     // return the appropriate number of components, for instance 
     return 3; 
    } 

    if([pickerView isEqual: pickerTwo]){ 
     // return the appropriate number of components, for instance 
     return 4; 
    } 
} 
+0

này làm việc tuyệt vời, nhờ .. chỉ vấn đề là tôi nhận được một cảnh báo nói rằng "cảnh báo - kiểm soát đạt cuối void function non" bạn có biết tại sao? –

+1

ahh .. Được rồi, đó là vì nó có thể sẽ không trả lại gì cả, vì vậy hãy thêm người khác {return 0; } và các lỗi biến mất ... Cảm ơn một lần nữa cho cả hai bạn .. Tuyệt vời helt: D –

+0

làm thế nào tôi có thể gán các giá trị mảng khác nhau cho hai UIPIckers khác nhau – MaheshBabu

15

Cách thuận tiện nhất để thực hiện việc này là sử dụng thuộc tính tag của bộ chọn khung nhìn. Tôi thường định nghĩa chúng trong tiêu đề để dễ đọc. Bạn có thể đặt thẻ trong Trình tạo giao diện hoặc trong mã.

#define kPickerOne 0 
#define kPickerTwo 1 

Sau đó, trong tập tin thực thi của bạn ...

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    if(pickerView.tag == kPickerOne) 
    { 
      // do something with picker one 
    } 
    else if(pickerView.tag == kPickerTwo) 
    { 
      // the other picker 
    } 
} 
Các vấn đề liên quan