我的自定义 UIView 没有显示在屏幕上

Posted

技术标签:

【中文标题】我的自定义 UIView 没有显示在屏幕上【英文标题】:My custom UIView not being displayed on screen 【发布时间】:2013-08-26 21:17:39 【问题描述】:

我创建了一个自定义 UIView 来保存一个选择器视图和一个带有几个按钮的导航栏。我还创建了一个带有导航栏、2 个按钮和选择器的自定义笔尖,所有这些都链接到我的头文件。我为每个单独的类设置了一个代表来处理所有的选择器视图代表。我的问题是它不会在需要时显示在屏幕上。我知道该方法被调用,但自定义视图不会出现。下面是我的代码。

CustomPicker.m:

- (IBAction)selectClick:(id)sender

    NSObject *obj = [self.list objectAtIndex:[self.picker selectedRowInComponent:0]];
    [self.delegate pickerDidSelect:obj];


- (IBAction)selectCancel:(id)sender

    [self.delegate removePickerFromView:self];


- (id)initWithFrame:(CGRect)frame

    frame.size = CGSizeMake(320, 260);
    self = [super initWithFrame:frame];
    if (self) 
        // Initialization code
    

    self.picker = [[UIPickerView alloc] init];
    self.picker.dataSource = self;
    self.picker.delegate = self;
    self.picker.showsSelectionIndicator = YES;

    return self;


-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView

    return [self.delegate numberOfComponentsInPicker:pickerView];


-(NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger)component

    return [self.delegate picker:pickerView numberOfRowsInComponent:component];


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

    return [self.delegate picker:pickerView titleForRow:row forComponent:component];

调用显示的方法

-(void)displayPicker

    NSLog(@"display picker");
    picker = [[CustomPicker alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, 320, 260)];
#warning picker set up incomplete
    [self.view addSubview:picker];
    CGRect frame = picker.frame;
    frame.origin = CGPointMake(0, self.view.frame.size.height - 260);
    [UIView animateWithDuration:1.5 animations:^
        [picker setFrame:frame];
    ];

现在,我只是不明白为什么我的自定义视图没有显示。

谢谢!

【问题讨论】:

【参考方案1】:

CustomPicker 类的实现不会向自身添加任何子视图。您的自定义选择器视图已正确添加和显示,但它是空的,因此没有什么可看的。

更新CustomPickerinitWithFrame:方法,将self.picker添加到self

[self addSubview:self.picker];

顺便说一句 - 您创建和设置 UIPickerView 的代码应该在 if 语句中完成。如果selfnil,您不想运行该代码。

- (id)initWithFrame:(CGRect)frame

    frame.size = CGSizeMake(320, 260);
    self = [super initWithFrame:frame];
    if (self) 
        self.picker = [[UIPickerView alloc] init];
        self.picker.dataSource = self;
        self.picker.delegate = self;
        self.picker.showsSelectionIndicator = YES;
        [self addSubview:self.picker];
    

    return self;

【讨论】:

好吧,我创建了一个 nib 文件,对不起,我应该提到这一点。 nib 文件是一个带有导航栏、2 个按钮和选择器的 UIView。导航栏和选择器链接到一个属性,两个按钮连接到 2 个方法 这并没有改变您发布的代码在代码中完成所有事情的事实。您不会尝试从笔尖创建视图。进行我建议的更改,然后选择器就会出现。 好吧,你是对的,我做了这些改变,它奏效了。现在我如何让它从我的笔尖加载? 我不知道如何从你的笔尖加载。我用代码做所有事情。

以上是关于我的自定义 UIView 没有显示在屏幕上的主要内容,如果未能解决你的问题,请参考以下文章

UIView 上的自定义圆角

使用 iCarousel 时,我的自定义 UIView 显示但里面啥都没有?

显示没有 UIViewController 的 UIView

如何显示自定义模态 UIView?

为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?

如何在 Worklight 上自定义直接更新消息?