当前位置:  开发笔记 > 编程语言 > 正文

你如何使UIPickerView组件环绕?

如何解决《你如何使UIPickerView组件环绕?》经验,为你挑选了2个好方法。

我想在UIPickerView组件中显示一组连续的数字,但它像Clock-> Timer应用程序的秒组件一样包围.我可以启用的唯一行为类似于Timer应用程序的hours组件,您只能在一个方向上滚动.



1> squelart..:

将行数设置为大数量同样容易,并使其从较高值开始,用户很可能在很长一段时间内滚动滚轮 - 即便如此,情况会更糟糕碰巧是他们会触底.

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    // Near-infinite number of rows.
    return NSIntegerMax;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    // Row n is same as row (n modulo numberItems).
    return [NSString stringWithFormat:@"%d", row % numberItems];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease];
    // ...set pickerView properties... Look at Apple's UICatalog sample code for a good example.
    // Set current row to a large value (adjusted to current value if needed).
    [pickerView selectRow:currentValue+100000 inComponent:0 animated:NO];
    [self.view addSubview:pickerView];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSInteger actualRow = row % numberItems;
    // ...
}


`NSIntegerMax`可能不是一个聪明的举动.`NSIntegerMax`是平台依赖的.它崩溃了Lion上的模拟器(其中`NSInteger`被定义为`long`)."NSInteger"的iOS定义可能会发生变化,从而导致同样的崩溃.最好使用您测试过的显式数字.
在带有'NSInternalInconsistencyException'的iOS 9模拟器上失败,原因是:'无法在第0节中为9223372036854775807行分配数据存储.考虑使用较少的行'

2> David..:

我在这里找到了答案:

http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638

当它要求一行的标题时,给它:代码:

return [rows objectAtIndex:(row % [rows count])];

当它说用户didSelectRow:inComponent:时,使用如下内容:

码:

//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after)
if (row < [rows count] || row >= (2 * [rows count]) ) {
    row = row % [rows count];
    row += [rows count];
    [pickerView selectRow:row inComponent:component animated:NO];
}

UIPickerView似乎不支持原生包装,但你可以通过插入更多数据集来愚弄它,当选择器停止时,将组件居中到数据集的中间.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有