在iPhone中使用TableView页脚的圆角矩形按钮?

时间:2010-12-23 16:30:57

标签: iphone xcode uitableview uibutton tableview

我正在尝试将按钮放在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方法??

2 个答案:

答案 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的子类,因此应该可以正常工作。