UIPickerView
类有一个方法selectedRowInComponent
,它返回组件的选定行。这可能是也可能不是选择器视图中心的项目。我想要的是能够告诉当前正在显示(未选择)的pickerView数据的索引。
为了说明差异,如果您点击UIPickerView拨号中的值,该值的行似乎始终在selectedRowInComponent
中返回。但是,如果用户通过多个值滚动选择器然后抬起手指,则selectedRowInComponent
不会更新,或者更新为刚刚滚动的值。
无论如何确定实际拨打选择器组件的位置?
该值始终在方法pickerView:didSelectRow:inComponent:
中可用,但我想在方法pickerView:titleForRow:forComponent:
中查询
为什么呢?因为在滚动UIPickerView时selectedRowInComponent
没有被调用。如果由于某种原因我到达数据的末尾并需要添加更多数据,我需要在被调用的方法中执行此操作。这似乎是pickerView:titleForRow:forComponent:
,每行都会调用它。
答案 0 :(得分: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
// ...
}
使用 selectedRowInComponent UIPickerView 可以随时知道选择哪一行(或在中心查看,我认为是相同的) EM> 强>
如果您在委托方法 pickerView:titleForRow:forComponent 中使用该方法 selectedRowInComponent ,每当新标题被打印时,您就可以知道正在中心查看哪一行"打印"在选择器视图中的用户。
有时,如果在Picker View中只滚动1或2行,则代理的方法 pickerView:titleForRow:forComponent 不会被调用而你不知道在中心正在查看哪一行。要解决这个问题,请在委托方法 pickerView:didSelectRow:inComponent: 中使用相同的方法 selectedRowInComponent 强>
希望这有助于某人。