首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >选取器无法识别最后一行

选取器无法识别最后一行
EN

Stack Overflow用户
提问于 2010-09-29 09:55:13
回答 2查看 651关注 0票数 1

这似乎是直接来自文档的非常标准的代码,所以我不确定我做错了什么……

我的3组件选择器在加载时看起来不正确,选择器上的选择指示器放置得太低(因此灰色条被正确放置,但清晰的凸起外观的覆盖层太低)。

然后,当我选择一行时,它会完美地工作,除非我选择了最后一行,在这种情况下,它会认为我选择了倒数第二行。

数组中的标题计数是正确的(例如,7),当我选择行"0-5“时,它工作得很好,但当我选择行"6”(第7行)时,它仍然认为我选择的是"5“。因此,第六行和第七行都将返回"5“而不是"5和6”。

这三个组件都会发生这种情况,实际上在代码中其他地方我的另一个更简单的选择器中也是以类似的方式发生的(实际上,对于那个选择器,只有当我来自父视图控制器时才会发生这种情况)。当我来自子视图控制器时,这是很好的)。

你能帮上忙吗?

代码语言:javascript
代码运行次数:0
运行
复制
- (void)loadmypicker {
UIPickerView *mypicker = [[UIPickerView alloc] init];
[mypicker setDataSource:self];
[mypicker setDelegate:self];
pickerTitles_Dil = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", nil];
pickerTitles_Eff = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", nil];
pickerTitles_Stat = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", nil];
[mypicker setShowsSelectionIndicator:YES];
[mypicker selectRow:0 inComponent:0 animated:NO];
[mypicker selectRow:0 inComponent:1 animated:NO];
[mypicker selectRow:0 inComponent:2 animated:NO];
[mypicker setFrame:CGRectMake(0, 98, 320, 253)];
[self addSubview:mypicker];
    [mypicker release];
}

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

if (component == 0)
    return [pickerTitles_Dil objectAtIndex:row];
else if (component == 1)
    return [pickerTitles_Eff objectAtIndex:row];
else return [pickerTitles_Stat objectAtIndex:row];
 }

 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 3;
 }


 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if (component == 0)
{return [pickerTitles_Dil count];
}
else if (component == 1)
{return [pickerTitles_Eff count];
}
else 
{return [pickerTitles_Stat count];
}
   }

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog (@"row: %d, component :%d", row, component);
 }

谢谢你的帮助!

其他人也有这个问题吗?总而言之,选取器显示了最后一行,但我无法选择它。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-10-20 03:32:26

修复问题:选取器高度不能超过216。因为我是在253点走过来的,所以所有其他问题都随之而来。谢谢!

票数 1
EN

Stack Overflow用户

发布于 2010-10-02 02:26:38

不知何故,我认为下面的数据源方法被弃用了,对吧?

代码语言:javascript
代码运行次数:0
运行
复制
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

如果您尝试使用以下方法来执行此操作,会发生什么情况?

代码语言:javascript
代码运行次数:0
运行
复制
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

也许这会有帮助?但我不确定这是否能帮你解决这个问题。

EDIT:尝试这样做,新方法不能直接返回字符串,但需要视图:

代码语言:javascript
代码运行次数:0
运行
复制
 /* Because the UIPickerView expects a UIView for every row you insert in the UIPickerView, you need to make one. What I do here is really simple. I create a UILabel* and with each row it requests I just change the text in the UILabel. */

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
    /* Create a UILabel and set it 40 pixels to the right, to make sure it is put nicely in the UIPickerView */
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(40, 0, 280, 25)] autorelease];
        label.textColor = [UIColor blackColor];
        label.backgroundColor = [UIColor clearColor];

        switch (row)
        {
            default:
            case kUnderClock:
                label.text = @"Under clock";
                break;
            case kAboveSlider:
                label.text = @"Above lock slider";
                break;
            case kCenter:
                label.text = @"Vertically centered";
                break;
        }

        return label;
    }

很抱歉出现了缩进问题,直接从我的博客上复制了这篇文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3818249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档