我正在尝试在tableview中添加UISegmentedControl。我的tableview中有两个部分,我希望将分段控件放在第二部分中。在我的实现中,我重写viewForHeaderInSection如下。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (section == 1)
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(10, 0,tableView.bounds.size.width, 10)] autorelease];
NSArray *segmentTextContent = [NSArray arrayWithObjects:NSLocalizedString(@"Singles", @""), NSLocalizedString(@"Everyone", @""),nil];
UISegmentedControl *segmentedControl = [[[UISegmentedControl alloc] initWithItems:segmentTextContent] autorelease];
segmentedControl.selectedSegmentIndex = 1;
segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.frame = CGRectMake(0, 0, tableView.bounds.size.width+10, 20);
[segmentedControl addTarget:self action:@selector(loadTable:) forControlEvents:UIControlEventValueChanged];
[headerView addSubview:segmentedControl];
return headerView;
}
else
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(10, 0,tableView.bounds.size.width, 10)] autorelease];
return headerView;
}
}
我的问题是,一旦我选择了特定的细分,它似乎就不会被选中。即它没有像预期的那样变暗。我之前已将分段控件放在导航栏中,并按预期选择后对段进行着色。
任何帮助都将受到高度赞赏。 感谢
答案 0 :(得分:1)
这是一个迟到的反应,但我遇到了同样的问题,并找出了问题所在。在上面的代码中,每次tableView调用reloadData时都会重新创建headerView(在我基于segmentedControl的点击来获取数据之后发生),因此分段控件返回到其原始状态,并且触摸显然不是反射。
为了解决这个问题,我将segmentedControl设为ivar,并检查它是否已经存在。如果是这样,那么只需致电
[headerView addSubview: segmentedControl];
否则执行控件的整个设置。
希望这有帮助。
答案 1 :(得分:0)
你有没有找到答案?我实现了几乎相同的东西,它工作得很好。我的猜测是你控制的大小比视图的边界大。
CGRectMake(0, 0, tableView.bounds.size.width+10, 20)
我相信这会导致控件在所有情况下都不会接收触摸事件。