UIPicker - selectRow:12 inComponent:0 动画:NO 不工作(12 或超过 12)

Posted

技术标签:

【中文标题】UIPicker - selectRow:12 inComponent:0 动画:NO 不工作(12 或超过 12)【英文标题】:UIPicker - selectRow:12 inComponent:0 animated:NO not working (12 or more than 12) 【发布时间】:2014-01-15 08:05:48 【问题描述】:

UIPicker 遇到了一个奇怪的问题。

我有UIPicker,在那里我展示了美国的一些州。默认情况下,随机选择已经完成。为此,我使用以下语句。

[statesPicker selectRow:myRegPos inComponent:0 animated:NO];

然而,此语句仅在myRegPos <= 11 时有效。

当我有myRegPos >= 12 时,默认的第一个选项被选中。知道为什么会这样吗?

myRegPos = 2

myRegPos >= 12

为了确认我们有多少行,我在

中看到
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

我在这里打印返回的数字,它是 64。

知道为什么会这样吗?


标题我用

if ([tappedWhat isEqualToString:@"states"]) 
        return [NSString stringWithFormat:@"%@", [[feedsStates objectAtIndex:row] objectForKey:[NSString stringWithFormat:@"NameS"]]];

我担心的是

当它与

一起使用时

[statesPicker selectRow:3 inComponent:0 animated:NO];

为什么不用

[statesPicker selectRow:12 inComponent:0 animated:NO];?

NOOOOOOO.....这真的让我发疯。知道出了什么问题吗?这是 2 天,但没有解决方案:(

【问题讨论】:

你在课堂上把这行放在哪里了:[statesPicker selectRow:myRegPos inComponent:0 animated:NO];? @holex :解析完成后我有这条线......我从网络服务带来随机数,我在解析后使用该数字......所以我有- (void)parserDidEndDocument:(NSXMLParser *)parser [statesPicker selectRow:12 inComponent:0 animated:NO]; 确保在配置pickerView后调用它。 @KudoCC :如果配置有问题,那么 [statesPicker selectRow:3 inComponent:0 animated:NO]; 应该没有工作 好吧,上传你的项目是最快的解决办法。 【参考方案1】:

我假设您确保您的视图控制器实现了 UIPickerViewDataSource 和 UIPickerViewDelegate 协议。这 64 行是由您在 pickerView:numberOfRowsInComponent:

中定义的

您是如何实现 titleForRow 方法的?你把所有的64个标题都放了吗?还是只实现了 12 个州?

-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

【讨论】:

【参考方案2】:

调用[statesPicker reloadAllComponents] ; 并确保feedsStates 在选择第12 行之前填充了数据。

NSAssert([[NSThread currentThread] isMainThread], @"error") ;
NSAssert(statesPicker != nil, @"error") ;
NSAssert([feedsStates count] >= 12, @"error") ;
[statesPicker  reloadAllComponents] ;
[statesPicker selectRow:12 inComponent:0 animated:NO] ;

【讨论】:

@FahimParkar 更新我的答案,希望对您有所帮助。 对不起,这个 NSAssert 会做什么?我没有得到任何错误的措辞...只是提要计数的 NSLog...仍然是 64 .. & 仍然选择了第一行 @FahimParkar 你在主线程中调用它吗?更新答案以测试它是否在主线程中。 @FahimParkar 您可以创建一个演示并做类似的事情。如果仍然有错误,请上传项目。

以上是关于UIPicker - selectRow:12 inComponent:0 动画:NO 不工作(12 或超过 12)的主要内容,如果未能解决你的问题,请参考以下文章

为 UIPicker 设置 selectedRow 的问题

如何在 UIPicker 中动态填充值

UIPicker 从 NSUserDefaults 中选择双值

从单个 UIPicker 获取两个标签的值

为键盘切换 UIPicker

无法粘贴 UIPicker 文本着色