tôi đang thiết lập một UIPickerView
để có lựa chọn như lựa chọn một, lựa chọn b, lựa chọn c và vân vân. Tôi đã cố gắng để giải thích các mẫu mã từ Apple nhưng điều đó có vẻ rất khó hiểu cho một người mới bắt đầu như tôi. Tôi cũng muốn các lựa chọn từ khung nhìn chọn để đưa tôi đến một trang khác nếu điều đó là có thể.Tôi làm cách nào để thiết lập UIPickerView?
Trả lời
Điều hiển nhiên đối với mọi người mới bắt đầu là một số điều tẻ nhạt để hiểu những điều này lần đầu tiên.
Dù sao, bạn có biết cách sử dụng UITableView
s không? Bạn có biết cách sử dụng UITableViewDelegate
và UITableViewDataSource
không? Nếu câu trả lời của bạn là có, thì chỉ cần tưởng tượng UIPickerView
s giống như UITableView
s (nhưng hãy nhớ rằng chúng không phải là UITableViewController
s).
Hãy nói rằng, tôi đã là một UIPickerView
:
UIPickerView *objPickerView = [UIPickerView new]; // You need to set frame or other properties and add to your view...you can either use XIB code...
1) Trước tiên, bạn cần phải gán các delegate
và dataSource
đến UIPickerView
hoặc thông qua IB hoặc mã. Nó phụ thuộc vào thực hiện của bạn (Vì vậy, bước này trông rất giống với một UITableView
, đúng không?)
Như thế này:
objPickerView.delegate = self; // Also, can be done from IB, if you're using
objPickerView.dataSource = self;// Also, can be done from IB, if you're using
2) Tiếp theo, bạn cần xác định số lượng các bộ phận, như thế này :
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1; // Or return whatever as you intend
}
2) Sau đó, bạn cần phải xác định số hàng bạn cần:
- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
return 3;//Or, return as suitable for you...normally we use array for dynamic
}
3) Sau đó, , Xác định tiêu đề cho hàng (Và nếu bạn có nhiều phần, sau đó tiêu đề cho mỗi phần):
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [NSString stringWithFormat:@"Choice-%d",row];//Or, your suitable title; like Choice-a, etc.
}
4) Tiếp theo, bạn cần phải nhận được sự kiện này khi ai đó nhấp vào một yếu tố (Như bạn muốn điều hướng đến bộ điều khiển/màn hình khác):
- (void)pickerView:(UIPickerView *)thePickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
//Here, like the table view you can get the each section of each row if you've multiple sections
NSLog(@"Selected Color: %@. Index of selected color: %i",
[arrayColors objectAtIndex:row], row);
//Now, if you want to navigate then;
// Say, OtherViewController is the controller, where you want to navigate:
OtherViewController *objOtherViewController = [OtherViewController new];
[self.navigationController pushViewController:objOtherViewController animated:YES];
}
Đó là tất cả việc triển khai bạn cần.
UIPickerView sử dụng parten tương tự như sử dụng cho UITableView. Giao thức DataSource
và Delegate
.
Phương thức DataSource
được sử dụng để báo cho bộ chọn có bao nhiêu cột và số lượng hàng có trong bộ chọn của bạn.
Trong khi các phương pháp Delegate
dành cho phần còn lại, chiều cao của hàng, chiều rộng cột, lượt xem hoặc tiêu đề để hiển thị và cuộc gọi trở lại khi bộ chọn đã được di chuyển.
UIPickerView
tôi sẽ giải thích ngắn gọn như thế nào để đạt được điều đó lập trình
- (void)viewDidLoad {
[super viewDidLoad];
UIPickerView * picker = [UIPickerView new];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;
[self.view addSubview:picker];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 3;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSString * title = nil;
switch(row) {
case 0:
title = @"a";
break;
case 1:
title = @"b";
break;
case 2:
title = @"c";
break;
}
return title;
}
Về cơ bản trong viewDidLoad
chúng ta đang tạo và thêm một UIPickerView
để xem, nói với nó rằng điều khiển của chúng tôi phục vụ cả hai như delegate
và dataSource
(Bạn có thể Sau đó chúng tôi đang triển khai hai phương pháp nguồn dữ liệu để cho biết có bao nhiêu thành phần và số hàng trong mỗi thành phần mà pickerView có, tương ứng là numberOfComponentsinPickerView:
và pickerView:numberOfRowsInComponent:
Cuối cùng, chúng tôi đang triển khai phương thức ủy nhiệm pickerView:titleForRow:forComponent:
trả về nội dung của mỗi dòng.
Nếu bạn muốn tùy chỉnh hành vi khi một hàng đã được chọn, bạn có thể thực hiện phương thức ủy nhiệm pickerView:didSelectRow:inComponent:
- như tên được đề xuất - được gọi mỗi khi một hàng được chọn.
Đừng quên đặt khung. –
đăng dự kiến mã của bạn và giải thích vị trí mã không thành công. –
Chúng tôi có một nguồn tài nguyên rộng lớn để tìm hiểu trên internet. Trước khi đưa ra câu hỏi ở đây bạn phải làm một số nghiên cứu và thử một cái gì đó và sau đó nếu bạn gặp phải bất kỳ vấn đề nào SO là nơi dành cho bạn.Thử liên kết này http: //www.iphonesdkarticles .com/2009/01/uipickerview-creation-simple-picker.html. –
có thể trùng lặp của [iPhone UIPickerView trong UIViewController] (http://stackoverflow.com/questions/2250063/iphone-uipickerview-in-uiviewcontroller) –