1

该类UIPickerView有一个方法,该方法selectedRowInComponent返回组件的选定行。这可能是也可能不是位于选取器视图中心的项目。我想要的是能够知道当前正在显示的pickerView 数据的索引(未选择)。

为了说明差异,如果您点击 UIPickerView 表盘中的一个值,该值的行似乎总是以selectedRowInComponent. 但是,如果用户滚动选择器通过几个值然后抬起手指,selectedRowInComponent则不会更新,或者它会更新为刚刚滚动关闭的值。

无论如何确定选择器组件的实际拨号位置?

该值始终在方法中可用,pickerView:didSelectRow:inComponent:但我想在方法中查询它pickerView:titleForRow:forComponent:

为什么?因为在 UIPickerView 被滚动时selectedRowInComponent没有被调用。如果由于某种原因我到达数据的末尾并需要添加更多,我需要在一个正在调用的方法中完成。那似乎是pickerView:titleForRow:forComponent:,每行都调用它。

4

1 回答 1

0

我知道这个问题有点老了,但通过回答我可以帮助别人。

我想我找到了解决这个问题的方法。


解决方案

- (NSString *)pickerView:(UIPickerView *)pickerView
         titleForRow:(NSInteger)row
        forComponent:(NSInteger)component
{
    // Passing the row being viewed to a function that does something with it.
    [self handleRowBeingViewed:[pickerView selectedRowInComponent:component]];
}

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component
{
    // Passing the row being viewed to a function that does something with it.
    [self handleRowBeingViewed:[pickerView selectedRowInComponent:component]];
}

/**
 * It receives, in input 'rowBeingViewed', the row being viewed by the user in the center of the picker view, and use it to XYZW... 
 *
 *
 * @param rowBeingViewed     Row currently being viewed by the user in the center of the picker view.
 * @return
 */
- (void) handleRowBeingViewed:(NSInteger)rowBeingViewed
{
     // Printing for debugging.
     NSLog(@"String Being Viewed: %@", pickerViewArray[rowBeingViewed]);

     // DO YOUR STUFF HERE
     // ...
}

解释

UIPickerView让您可以随时使用 selectedRowInComponent 方法知道选择了哪一行(或在中心查看,我认为是相同的

如果您在委托的方法pickerView:titleForRow:forComponent中使用该方法selectedRowInComponent,则每次在选取器视图中向用户“打印”新标题时,您都可以知道在中心查看的是哪一行。

有时,如果在 Picker View 中只滚动 1 或 2 行,则不会调用委托的方法pickerView:titleForRow:forComponent并且您将不知道在中心查看的是哪一行。为了解决这个问题,还要在委托的方法pickerView:didSelectRow:inComponent:中使用相同的方法selectedRowInComponent

希望这可以帮助某人。

于 2016-06-07T19:41:51.240 回答