无法将子视图添加到我的 UIView

Posted

技术标签:

【中文标题】无法将子视图添加到我的 UIView【英文标题】:Not able to add subview to my UIView 【发布时间】:2013-04-23 15:41:52 【问题描述】:

我在屏幕上有一个UIView 元素。它通过IBOutlet radioButtonGroupView 连接。我正在尝试向该元素添加一个子视图,但它不起作用。永远不会添加子视图。

这是我的代码:

-(id) initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];


    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    subView.backgroundColor = [UIColor yellowColor];

    [self.radioButtonGroupView addSubview:subView];

    return self;

【问题讨论】:

因为我的 UITableView 包含在一个 nib 文件中。确实调用了 initWithCoder 方法,但从未添加过子视图。 radioButtonGroupView 此时将为零。 那么,我认为我应该在视图控制器中这样做? 把这些行移到viewDidLoad/viewWillAppear: 就可以了.. 【参考方案1】:

如果你让这个元素成为UIViewController 的子类(而不是UIView),你可能会更好。

然后把子视图加载代码放在viewDidLoad方法里面。

 - (void)viewDidLoad
    
        [super viewDidLoad]; //not really needed but it doesn't hurt

        UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        subView.backgroundColor = [UIColor yellowColor];

        [self.radioButtonGroupView addSubview:subView];
    

编辑:

你说你在viewDidLoad 中没有得到任何关于self.radioButtonGroupView 的帧信息。这几乎可以确定您的IBOutlet 没有正确连接到InterfaceBuilder 中的元素。你总是可以做一个简单的测试:

- (void)viewDidLoad

    [super viewDidLoad]; //not really needed but it doesn't hurt

    NSLog (@"self.radioButtonGroupView: %@",self.radioButtonGroupView);

    [self.radioButtonGroupView setHidden:YES];

如果它仍然显示 - 那么它只是没有正确连接。 IB有它的方法。简单的 删除IBOutlet 连接并重新连接它可能会奏效。另外:如果您的radioButtonGroupView 不是UIView 而是UIView 的子类,请确保它的头文件已导入您的MyViewController.m 文件和.xib 中正确定义的类。

【讨论】:

如果我在视图控制器中使用它,那么 self.radioButtonGroupView.frame.origin.x 和 y 以及宽度和高度都返回 0。 很可能与 IB Outlet 的连接丢失或错位。 已连接!我总是有这个问题,在我的视图控制器中我无法获得 IB 元素的当前坐标。 检查 self.radioButtonGroupView 当时是否为 nil (viewDidLoad)。

以上是关于无法将子视图添加到我的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

是否不可能将子视图添加到我的 UITableViewCell 的 contentView 并使其宽度与 contentView 相等?

将子视图添加到 UICollectionViewCell 子类?

将子视图添加到 UIViews 数组?

选择时将子视图添加到 UITableViewCell

iphone - 将子视图添加到窗口后无法推送模态视图?

如何在一行代码中将多个子视图添加到我的 iOS 视图中? (也许通过“monkeypatching”一个 `addSubviews` 实例方法到 UIView?)