无法将子视图添加到我的 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 子类?
如何在一行代码中将多个子视图添加到我的 iOS 视图中? (也许通过“monkeypatching”一个 `addSubviews` 实例方法到 UIView?)