我正在尝试将按钮放在TableView的页脚上。
这就是我所做的,我看不到按钮,但显示字符串“RESULT”。
我已经尝试了我能想到的一切。但我无法弄清楚出了什么问题。我需要你的帮助!
- (void)viewDidLoad {
btnSeeResult = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnSeeResult setTitle:@"RESULT" forState:UIControlStateNormal];
viewResult = [[UIView alloc] initWithFrame:btnSeeResult.frame];
[viewResult addSubview:btnSeeResult];
self.tableView.tableFooterView = btnSeeResult;
}
-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return viewResult.bounds.size.height;
}
无论如何,直接设置页脚视图与
之间的区别是什么tableView.tableFooterView = footerView;
并使用(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
方法??
答案 0 :(得分:2)
没有理由使用viewResult
包装器。 UIButton是一个UIVut,因此在这种情况下没有理由将它包装在另一个UIView中 - 特别是因为然后你将按钮分配给表的页脚属性,这意味着表应该控制按钮视图最终显示的方式和时间。
您可能必须设置btnSeeResult
的框架,以便设置高度。在这种情况下,默认情况下高度可能为0,因为您没有为它设置框架。设置标题之后,您也可以尝试类似[btnSeeResult sizeToFit];
之类的标题,该标题应该足够大,以便为标签文本留出空间,至少。
关于你的第二个问题,tableFooterView
和-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
之间的区别在于前者定义了一个附加到整个表底部的视图,而委托方法允许你给每个子你桌子上的部分不同的页脚。两者都可以同时使用,在这种情况下,最后一部分的页脚视图最后会显示tableFooterView
。
答案 1 :(得分:0)
SeniorLee,
欢迎使用StackOverflow!
你的问题得到了正确的答案 - 这是后一个代码:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
当表视图构建表时,它会回调到2个类 - 表的委托和表的数据源。
数据源就是名称所暗示的 - 表中数据的来源。另一方面,代表处理与表格的实时交互以及如何显示(例如,当按下行时会发生什么?)。
在很多情况下,程序员将表视图的Data Source和Delegate都设置为同一个类 - 拥有表视图的UITableViewController。
无论如何,关于你的问题:
直接赋值很可能没有明确地工作,因为有一个委托回调。当表格视图出现时,它会询问其代表“你是否在x部分有一个页脚视图?”。这就是上面的方法。
如果您没有实现该方法,那么表视图将具有执行某些操作的默认实现 - 在这种情况下,可能将其设置为nil。
所以,我的猜测是即使你直接在viewDidLoad中设置了这个属性,它也会被表视图覆盖为nil,因为你没有实现委托回调。相反,将您的视图代码移动到回调方法,它应该可以很好地工作。
另外,我认为您不需要将UIButton包装在UIView中 - UIButton是UIView的子类,因此应该可以正常工作。