1

我正在尝试学习如何使用 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]);
}

但是警报视图永远不会起作用。所以我不确定我在这里做错了什么。

4

1 回答 1

1

我怀疑您在 nib 文件中缺少连接,特别是从 myPicker 出口到 UIPickerView 实例。如果是这样的话,那myPicker就是零,所以这条线

NSInteger row = [myPicker selectedRowInComponent:0];

将始终将行设置为 0,这解释了为什么您总是显示数组中的第一项。

除了检查您的 nib 文件之外,您还可以通过在 buttonPressed 方法中设置断点并检查 myPicker 是否为 nil 来确认这一点。

确实有从 UIPickerView 的委托/数据源出口到您的控制器类的连接,这就是您的委托方法被调用的原因。但是您需要在另一个方向进行连接才能使您的按钮方法正常工作。

于 2009-12-13T00:37:52.837 回答