开发者

Problem in inserting segmented control to header view

I'm trying to add a UISegmentedControl in my tableview. I have two sections in my tableview and I want the segmented control to be placed in the 2nd section. In my implementation, I override viewForHeaderInSection as follows.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

if (section == 1)
{   
    UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(10, 0,t开发者_如何学运维ableView.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;
}

}

My problem is that once I select a particular segment, it doesn't appear to be selected. i.e. it's not getting dark colored as expected. I have placed the segmented control in my navigation bar earlier and it colors the segment after selection as expected.

Any help would be highly appreciated. Thanks


This is a late reaction, but I ran into the same issue and figured out the problem. In the code above, the headerView is recreated everytime the tableView calls reloadData (which in my occurs after I resort the data based on a click on the segmentedControl), and therefore the segmented control goes back to its original state, and touches are not apparently reflected.

To solve this, I made segmentedControl an ivar, and check if it already exists. If so, then just call

[headerView addSubview: segmentedControl];

otherwise do the whole setup of the control.

Hope this helps.


Had you ever found the answer to this? I implemented virtually the same thing and it worked fine. My guess is that you have sized you control bigger than the bounds of the view.

CGRectMake(0, 0, tableView.bounds.size.width+10, 20)

I believe this will cause a control not to receive touch events in all cases.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜