UIPickerView 自定义视图不可视化

Posted

技术标签:

【中文标题】UIPickerView 自定义视图不可视化【英文标题】:UIPickerView custom view don't visualizate 【发布时间】:2011-12-16 13:52:21 【问题描述】:

我有自定义视图:

#import <UIKit/UIKit.h>
@interface materialView : UIView 
    IBOutlet UIImageView * _img;
    IBOutlet UILabel * _title;

- (id)initWithTitle:(NSString*)pTitle image:(UIImage *)pImage;
@end

#import "materialView.h"
@implementation materialView
- (id)initWithTitle:(NSString*)pTitle image:(UIImage *)pImage 
    CGRect frame = CGRectMake(0, 0, 295, 38);
    self = [super initWithFrame:frame];
    if (self) 
        [_img setImage:pImage];
        [_title setText:pTitle];
    
return self;

@end

然后我将此视图添加到我的 UIPickerView:

- (id)init 
    self=[super init];
    if (self) 
        materialView * pl = [[materialView alloc] initWithTitle:@"Plastic" image:[UIImage imageNamed:@"aaa.jpeg"]];
        materialView * gl = [[materialView alloc] initWithTitle:@"Glass" image:[UIImage     imageNamed:@"bbb.jpeg"]];
        _loadedItems = [[NSArray arrayWithObjects:pl, gl, nil] retain];
     
return self;

...

pickerView.dataSource = self;
pickerView.delegate = self;
...

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
    return [_loadedItems objectAtIndex:row];

问题是,我的行为很奇怪。我的视图不显示在选取器视图中。 任何人都可以帮助我吗?

【问题讨论】:

【参考方案1】:

首先,在你的:

- (UIView *)pickerView:(UIPickerView *)pickerView
            viewForRow:(NSInteger)row
          forComponent:(NSInteger)component
           reusingView:(UIView *)view

测试_loadedItewsobjectAtIndex: 返回的对象不是nil?在没有更多上下文的情况下,您的代码看起来很合理。

还将自定义视图的 userInteractionEnabled 属性设置为 NO。似乎如果将其设置为 YES,则自定义视图会拦截触摸,并且选择器无法滚动到被点击的行。

【讨论】:

我相信,这应该用 pickerView 做 PickerViewDelegate: viewForRow: forComponent: reusingView: is not true? 2 彼得。谢谢,你是对的。我应该在初始化期间将我的 ImageVie 和标签添加到自定义视图中。我已经创建了 .xib 文件,并且坚信 重新阅读问题会更清楚,但请考虑将来如何标记问题。

以上是关于UIPickerView 自定义视图不可视化的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义视图的 UIPickerView 在 iOS7 中被破坏

iOS7 UIPickerView 的奇怪行为与 UIImage 作为自定义视图,任何官方信息?

在 UIPickerView 中使用自定义视图时突出显示选择和自动向上/向下滚动

iOs5,试图了解 UIPickerView 以及如何将其连接到我的自定义类

从自定义数据源中获取选定的行?

带有图像的自定义 UIPickerView 皮肤