目标 C (UIPickerView):选择项目后执行操作

Posted

技术标签:

【中文标题】目标 C (UIPickerView):选择项目后执行操作【英文标题】:Objective C (UIPickerView): Do Action Once An Item Was Selected 【发布时间】:2013-07-16 03:06:24 【问题描述】:

在我正在开发的应用程序上,我有一个UIPickerView 上的时间表列表,我想做的是在选择列表中的第 6 项后启用一个按钮。

我有这个代码,但它不工作

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component 
    // Handle the selection
        [trainSchedule setText:[NSString stringWithFormat:@"%@",[schedArray objectAtIndex:[pickerView selectedRowInComponent:0]]]];
        if ([schedArray objectAtIndex:[schedArray objectAtIndex:[pickerView selectedRowInComponent:6]]])  sendTrainRequest.enabled = YES;  else  sendTrainRequest.enabled = NO;      

我也有这个警告...

Incompatible pointer to integer conversion sending 'id' to parameter of type 'NSUInteger' (aka 'unsigned int

a 将如何做我想做的事?

【问题讨论】:

您是否将选取器视图的代理设置为self @ChrisLoonam 是的,我做到了。我编辑了我的问题。我添加了警告。 您是否设置了断点来确定是否调用了委托方法? @Jamie 是的,它正在被调用。 在您逐步​​查看“trainSchedule”和“schedArray”值时很难提供帮助。 【参考方案1】:

我认为您正在寻找一个名为 pickerView:didSelectRow:inComponent:UIPickerViewDelegate 方法,记录在案的 here

【讨论】:

这就是他正在使用的。 @ChrisLoonam 哎呀哈哈错过了。您的评论可能是正确的。【参考方案2】:

我认为问题出在您的 if 语句中。如果我正在解析您要正确表达的内容,那么如果选择器中的第六个项目被选中,您希望将 sendTrainRequest.enabled 设置为 YES。您的 if 语句现在令人困惑,警告是因为您将对象发送到 schedArray 的 objectAtIndex 方法,而您应该发送一个整数。试试这个:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component 
// Handle the selection
    [trainSchedule setText:[NSString stringWithFormat:@"%@",[schedArray objectAtIndex:[pickerView selectedRowInComponent:0]]]];
    if ([pickerView selectedRowInComponent:0] == 5) 
         sendTrainRequest.enabled = YES;  
    else 
         sendTrainRequest.enabled = NO;      

请注意,此 sn-p 中的硬编码 5 将评估为选择器视图中的第六个项目,因为它是零引用的。

【讨论】:

以上是关于目标 C (UIPickerView):选择项目后执行操作的主要内容,如果未能解决你的问题,请参考以下文章

UIPickerview 多个文本字段 Xcode

显示 UIPickerView 文本字段被选中,然后在选中后隐藏

UIPickerView - 改变组件宽度

UIPickerView 的 ViewController 在选择后冻结

如何自动化 UIPickerView 以使用 KIF 选择特定项目?

无法根据选择从 UIPickerView 中删除项目