据我所知,很多人都在堆栈上询问过这个问题。但是,这些都不能解决我的问题。我尝试以编程方式构建tableview,并且不调用cellForRowAtIndexPath。但是当我在故事板中拖动一个tableview时,一切都很好。这是相关的代码。
这是viewDidLoad中的代码
- (void)viewDidLoad
{
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,nil]];
self.navigationController.navigationBar.tintColor=[UIColor whiteColor];
self.navigationItem.title = @"发布失物招领启示";
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap setCancelsTouchesInView:NO];
self.itemDetails = @"请输入详情";
self.view.translatesAutoresizingMaskIntoConstraints = NO;
self.tableView = ({
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.dataSource = self;
tableView.delegate = self;
tableView.translatesAutoresizingMaskIntoConstraints = NO;
[tableView reloadData];
tableView;
});
[self.tableView registerNib:[UINib nibWithNibName:campusCellIdentifier bundle:nil] forCellReuseIdentifier:campusCellIdentifier];
[self.tableView registerNib:[UINib nibWithNibName:imageCellIdentifier bundle:nil] forCellReuseIdentifier:imageCellIdentifier];
[self.tableView registerNib:[UINib nibWithNibName:textFieldCellIdentifier bundle:nil] forCellReuseIdentifier:textFieldCellIdentifier];
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]];
effectView.frame = self.view.bounds;
[self.view addSubview:effectView];
self.postButton = [[AYVibrantButton alloc] initWithFrame:CGRectZero style:AYVibrantButtonStyleFill];
self.postButton.vibrancyEffect = nil;
self.postButton.text = @"发布";
self.postButton.font = [UIFont systemFontOfSize:18.0];
self.postButton.backgroundColor = [UIColor BBTAppGlobalBlue];
self.postButton.translatesAutoresizingMaskIntoConstraints = NO;
[effectView.contentView addSubview:self.postButton];
[self.view addSubview:self.tableView];
//Set up constraints
CGFloat verticalInnerSpacing = 10.0f;
CGFloat buttonHeight = 50.0f;
CGFloat tabBatHeight = self.tabBarController.tabBar.frame.size.height;
CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_top).offset(navigationBarHeight + 20);
make.bottom.equalTo(self.view.mas_bottom).offset(-tabBatHeight - 2*verticalInnerSpacing - buttonHeight);
make.centerX.equalTo(self.view.mas_centerX);
make.width.equalTo(self.view.mas_width);
}];
[self.postButton mas_makeConstraints:^(MASConstraintMaker *make){
make.bottom.equalTo(self.view.mas_bottom).offset(-tabBatHeight - verticalInnerSpacing);
make.height.equalTo(@(buttonHeight));
make.width.equalTo(self.view.mas_width).multipliedBy(0.55);
make.centerX.equalTo(self.view.mas_centerX);
}];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
协议中的那些。 谢谢你的帮助!
答案 0 :(得分:0)
正如其他人所说,如果你不将表视图添加为视图控制器内容视图的子视图,那么它将不会尝试绘制自己,也不会调用任何委托/数据源方法。 / p>
下一点:“相关代码”来自哪里?什么方法,在哪种方法?
下一点:
这种语法是什么?
self.tableView = ({
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.dataSource = self;
tableView.delegate = self;
tableView.translatesAutoresizingMaskIntoConstraints = NO;
tableView;
});
您在Objective-C代码中看到过哪种语法?我从来没有见过那种编码风格,而且自2007年以来我一直在密切关注Objective-C。我认为大括号表示一个范围,因为范围中的最后一个是表达式tableView;
,所以范围评估该变量?啊。
答案 1 :(得分:0)
你必须将UItableView的数据源和委托设置到你自己的类.....其他明智的你的表视图将无法从你的类变量中获取数据.....
请点击此链接阅读有关数据来源和委派的信息
答案 2 :(得分:0)
删除
self.view.translatesAutoresizingMaskIntoConstraints = NO;
在viewDidLoad中,通常系统会处理视图控制器视图的约束设置。它执行此操作的机制是自动调整掩码。当self.view.translatesAutoresizingMaskIntoConstraints = NO
系统期望为其提供约束但没有添加约束时,我不确定此实例是否存在已定义的行为,但它最好是通过允许系统处理self.view
的大小和位置来避免它。