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
测试_loadedItews
和objectAtIndex:
返回的对象不是nil
?在没有更多上下文的情况下,您的代码看起来很合理。
还将自定义视图的 userInteractionEnabled 属性设置为 NO。似乎如果将其设置为 YES,则自定义视图会拦截触摸,并且选择器无法滚动到被点击的行。
【讨论】:
我相信,这应该用 pickerView 做 PickerViewDelegate: viewForRow: forComponent: reusingView: is not true? 2 彼得。谢谢,你是对的。我应该在初始化期间将我的 ImageVie 和标签添加到自定义视图中。我已经创建了 .xib 文件,并且坚信 重新阅读问题会更清楚,但请考虑将来如何标记问题。以上是关于UIPickerView 自定义视图不可视化的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义视图的 UIPickerView 在 iOS7 中被破坏
iOS7 UIPickerView 的奇怪行为与 UIImage 作为自定义视图,任何官方信息?
在 UIPickerView 中使用自定义视图时突出显示选择和自动向上/向下滚动