2010-12-23 63 views
2

我想把一个按钮放到TableView的页脚上。在iPhone中使用圆形矩形按钮用于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

没有理由viewResult包装。一个UIButton是一个UIView,所以在这种情况下没有理由将它包装在另一个UIView中 - 尤其是当你将按钮分配给表的footer属性时,这意味着表应该控制按钮视图最终显示的方式和时间。

您可能必须设置btnSeeResult的框架,以便设置高度。在这种情况下,默认情况下高度为0,因为您从未设置过框架。至少在设置标题时,您可能还会尝试诸如[btnSeeResult sizeToFit];之类的东西,该标题应将其调整为足以为标签文本腾出空间。

至于第二个问题,tableFooterView-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section之间的区别在于前者定义了一个视图来附加到整个表格的底部,而委托方法允许您为表格中的每个子部分提供不同的页脚。两者都可以在同一时间使用,在这种情况下,最后一部分的页脚视图会出现在tableFooterView的最后。

+0

非常感谢您的回答。在我调用sizeToFit方法后,显示按钮。但它的高度完全适合它的字符串,但按钮会一直拖到左侧和右侧。我该怎么办?该死的我花了几天的时间用这个按钮! – SeniorLee 2010-12-25 13:58:51

0

SeniorLee,

欢迎来到StackOverflow!

你有你的问题正确的答案 - 是后者代码:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 

当表视图去构建你的表,它调用回2班 - 表的委托,和表的数据源。

数据源正是名称所暗示的 - 表中数据的来源。另一方面,委托处理与表格的实时交互以及如何显示它(例如,当行被按下时会发生什么?)。

在很多情况下,程序员都将表视图的Data Source和Delegate设置为同一个类 - 拥有表视图的UITableViewController。

总之,关于你的问题:

这是极有可能的是,直接分配没有明确的工作,因为有一个委托回调。当表格视图出现时,它会要求它的代表“你对x部分的页脚有什么看法?”。这是上面的方法。

如果您没有实现该方法,表视图将会有一个默认的实现来执行某些操作 - 在这种情况下,可能会将其设置为零。

所以,我的猜测是,即使您直接在viewDidLoad中设置此属性,它将被表视图覆盖为nil,因为您没有实现委托回调。相反,将您的视图代码移到回调方法,它应该很好地工作。另外,我不认为你需要将UIButton包装在UIView中 - UIButton是UIView的子类,因此应该工作得很好。

+0

非常感谢你;)你的回答真的很有帮助! – SeniorLee 2010-12-24 16:20:16