8 iphone objective-c uitableview
我有一个带自定义单元格的UIPickerView.对于每一刻,我都想知道哪个单元位于中心位置(有色选择指示器后面).UIPickerView委托方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
Run Code Online (Sandbox Code Playgroud)
确实提供此信息,但仅在选择器视图停止后才提供.我正在寻找的是一种检索当前"选定"单元格的方法,同时选择器视图仍在旋转并且尚未停止.
作为一种解决方法,我试图通过KVO并注册每个单元格的视图更改:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
.
.
[cell addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
}
Run Code Online (Sandbox Code Playgroud)
我接收到observeValueForKeyPath:ofObject:change:context:的回调,但无论我向上还是向下滚动选择器视图,接收的值似乎总是相同的:
2011-03-09 08:00:34.429 Project[35069:207] Frame: x=2.00, y=-13.00
2011-03-09 08:00:34.430 Project[35069:207] Location: x=4.00, y=-26.00
2011-03-09 08:00:34.430 Project[35069:207] Change: {
kind = 1;
new = "NSRect: {{2, -13}, {118, 70}}";
old = "NSRect: {{2, -13}, {118, 70}}";
}
2011-03-09 08:00:34.431 Project[35069:207] Frame: x=2.00, y=-13.00
2011-03-09 08:00:34.431 Project[35069:207] Location: x=4.00, y=-26.00
2011-03-09 08:00:34.432 Project[35069:207] Change: {
kind = 1;
new = "NSRect: {{2, -13}, {118, 70}}";
old = "NSRect: {{2, -13}, {118, 70}}";
(Location coordinates are in window frame)
Run Code Online (Sandbox Code Playgroud)
还有什么其他的想法,我可以尝试获得这个价值?
您可以使用选择器委托的-pickerView:titleForRow:forComponent:方法来很好地了解选择器轮子的位置。当您向一个方向或另一个方向滚动时,选择器将向其委托询问一行的标题(或视图)。轮子“中心”和拾取器要求的行之间的行数取决于行高,但您可能知道那是什么。
您必须进行一些尝试才能正确。选择器似乎要求一两行尚不可见,也许是为了保持滚动流畅。在我使用显示 5 行的选择器进行的测试中,选择器要求的行与中心行之间似乎存在大约 3 行差异。显然,您还必须跟踪旋转方向(向上或向下),并且在-pickerView:didSelectRow:inComponent:调用您之前,您不会知道是否选择了前两行或最后两行或三行。
| 归档时间: |
|
| 查看次数: |
3629 次 |
| 最近记录: |