我正在尝试学习如何使用UIPickerView,我不知道为什么我的警报视图总是打印数组中的第一个元素(选择器),而不是其他任何东西。我为选择器定义了一个按钮按下:
- (IBAction)buttonPressed {
NSInteger row = [myPicker selectedRowInComponent:0];
NSString *s = [myPickerData objectAtIndex:row];
NSLog(@"%@", s);
NSString *title = [[NSString alloc] initWithFormat:@"You selected, %@", s];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:@"Message"
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles:nil];
[alert show];
[alert release];
[title release];
}
我的数组定义为:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", nil];
self.myPickerData = array;
[array release];
}
我在更改选择器时记录输出,并且相应地将值更改为0,1,2。
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"%@", [myPickerData objectAtIndex:row]);
}
但警报视图永远不会有效。所以我不确定我在这里做错了什么。
答案 0 :(得分:1)
我怀疑您在nib文件中缺少连接,特别是从myPicker插座到UIPickerView实例。如果是这种情况,myPicker
将为零,所以行
NSInteger row = [myPicker selectedRowInComponent:0];
总是将行设置为0,这就解释了为什么你总是在数组中显示第一项。
除了检查你的nib文件之外,你还可以通过在buttonPressed方法中设置断点并检查myPicker是否为零来确认这一点。
您执行从UIPickerView的委托/ dataSource出口连接到您的控制器类,这就是调用您的委托方法的原因。但是您需要在另一个方向上建立连接才能使按钮方法正常工作。