我有2个视图控制器 - TableContainer和TableView。 TableView是UIViewController
子类,符合UITableViewDataSource
和Delegate。 UITableView
是TableView控制器中的属性。
我在TableContainer中初始化了5个TableView控制器,并将tableView属性添加为主TableContainer视图的子视图。
然后使用NSLayoutConstraint
进行布局以适合TableContainer视图中的5个tableView。我得到了这次崩溃
'NSInvalidArgumentException',原因:'*** + [NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]:Constraint必须包含第一个布局项'
我已经记录了它,原因是tableView属性为null。但是,我使用TableView控制器运行相同的精确代码而不是作为子类UIViewController
,而是作为一个实际的UITableViewController,它工作正常。
代码如下 TableView.h
#import <UIKit/UIKit.h>
@interface TableView : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) UITableView *tableView;
TableView.m(省略了委托和数据源方法,因为我已经测试过并且工作正常)
@interface TableView ()
@end
@implementation TableView
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc]init];
self.tableView.userInteractionEnabled = FALSE;
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[self.tableView setShowsVerticalScrollIndicator:NO];
self.tableView.delegate = self;
self.tableView.dataSource = self;
}
TableContainer.h
@interface TableContainer : UIViewController
@property (strong, nonatomic) TableView *tvVC1;
@property (strong, nonatomic) TableView *tvVC2;
@property (strong, nonatomic) TableView *tvVC3;
@property (strong, nonatomic) TableView *tvVC4;
@property (strong, nonatomic) TableView *tvVC5;
@end
TableContainer.m(省略tvVC 2-5的约束代码,因为它们与tvVC1的约束相同。)
@implementation TableContainer
- (void)viewDidLoad {
[super viewDidLoad];
self.tvVC1 = [[TableView alloc]init];
[self.view addSubview:self.tvVC1.tableView];
self.tvVC2 = [[TableView alloc]init];
[self.view addSubview:self.tvVC2.tableView];
self.tvVC3 = [[TableView alloc]init];
[self.view addSubview:self.tvVC3.tableView];
self.tvVC4 = [[TableView alloc]init];
[self.view addSubview:self.tvVC4.tableView];
self.tvVC5 = [[TableView alloc]init];
[self.view addSubview:self.tvVC5.tableView];
}
-(void)viewDidAppear{
UILayoutGuide *layoutGuide = self.view.layoutMarginsGuide;
self.tvVC1.tableView.translatesAutoresizingMaskIntoConstraints = FALSE;
NSLayoutConstraint *vc1 = [NSLayoutConstraint constraintWithItem:self.tvVC1.tableView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:0.2f constant:0.0f];
vc1.active = TRUE;
[self.tvVC1.tableView.leadingAnchor constraintEqualToAnchor:layoutGuide.leadingAnchor].active = TRUE;
[self.tvVC1.tableView.topAnchor constraintEqualToAnchor:layoutGuide.topAnchor].active = TRUE;
[self.tvVC1.tableView.bottomAnchor constraintEqualToAnchor:layoutGuide.bottomAnchor].active = TRUE;
答案 0 :(得分:0)
您还没有导致子表视图控制器加载/创建其视图。您需要访问每个子视图控制器的view
属性,而不仅仅是tableView
属性才能实现此目的。