尝试在UITableView中测试UITegmentedControl,UITableView是在UITableViewDelegate方法中创建的:
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
if (section == 0) {
UIView *container = [[UIView alloc]initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, [self tableView:tableView heightForFooterInSection:section])];
[self.segmentedControl setCenter:container.center];
[container addSubview:self.segmentedControl];
return container;
} else {
return [super tableView:tableView viewForFooterInSection:section];
}
}
在测试课程中:
-(void)testSegmentedControl {
MyTableViewController *viewController = [[MyTableViewController alloc]initWithNibName:@"MyTableViewController" bundle:nil];
[viewController.tableView reloadData];
// Getting the footer via the delegate is cheating IMO.
UITableViewHeaderFooterView *footer = [viewController.tableView footerViewForSection:0];
UISegmentedControl *segmentControl = footer.subviews[0];
// do stuff to the segmentControl then check the tableView.
[viewController.tableView reloadData];
}
我目前通过全局属性(UISegmentedControl
)操纵viewController.segmentedControl
,然后调用[viewController.tableView reloadData]
来更新UITableViewCell
的状态。但在我看来,从[viewController.tableView footerViewForSection:0]
获取页脚是正确的测试方法。任何指导都表示赞赏。
修改
正如约翰罗杰斯所建议的那样,我已经尝试将UITableViewHeaderFooterView像我们在cellForRowAtIndexPath:
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
if (section == 0) {
UITableViewHeaderFooterView *footer = [tableView dequeueReusableHeaderFooterViewWithIdentifier:self.footerReuseId];
if (footer == nil) {
footer = [[UITableViewHeaderFooterView alloc]initWithReuseIdentifier:self.footerReuseId];
}
if (![footer.subviews containsObject:self.segmentedControl]) {
[footer addSubview:self.segmentedControl];
}
return footer;
} else {
return [super tableView:tableView viewForFooterInSection:section];
}
}
测试方法没有改进:
-(void)testSegmentedControl {
MyTableViewController *viewController = [[MyTableViewController alloc]initWithNibName:@"MyTableViewController" bundle:nil];
[viewController.tableView reloadData];
UITableViewHeaderFooterView *footer1 = (UITableViewHeaderFooterView *)[viewController.tableView dequeueReusableHeaderFooterViewWithIdentifier:viewController.footerReuseId];
UITableViewHeaderFooterView *footer2 = [viewController.tableView footerViewForSection:0];
// Break point shows that footer1 and footer2 are nil.
}
答案 0 :(得分:0)
您遇到的问题是footerViewForSection
实际上是一个UITableView方法,它使用该方法为该部分提供视图。
您必须将可重复使用的UITableViewHeaderFooterView出列,以便在测试类中对其进行测试:
UITableViewHeaderFooterView *footer = [tableView dequeueReusableHeaderFooterViewWithIdentifier:mySectionFooterViewIdentifier];
这正是您在为表格视图提供的footerViewForSection
方法中应该使用的内容,而您只是在测试类中将其排队。
希望这有帮助!
~J