2012-12-21 37 views
0

選擇段我在一個UITableView一個headerview一個UISegmentedControl。出於某種原因,我無法選擇任何分段,只要我這樣做,它會自動選擇數組中的最後一個分段,而我不能選擇其他任何分段。當我刪除該動作時,我可以選擇哪一個。不知道發生了什麼事。的iOS不能UISegmentedControl

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

    if (section == 1) { 

     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0, 320, 40)]; // x,y,width,height 

     NSArray *itemArray = [NSArray arrayWithObjects:@"E01", @"E02", @"E03", @"E05", @"E06", @"T05", @"E17", @"E19", nil]; 
     control = [[UISegmentedControl alloc] initWithItems:itemArray]; 
     [control setFrame:CGRectMake(30.0, 0, (tableView.bounds.size.width) - 60, 40)]; 
     [control setSelected:YES]; 
     [control setSegmentedControlStyle:UISegmentedControlStylePlain]; 
     [control addTarget:self action:@selector(unitSegmentControl:) forControlEvents:UIControlEventValueChanged]; 

     [headerView addSubview:control]; 

     return headerView; 
    } 

    return nil; 
} 
+0

你在說什麼?我沒有對這種性質說過什麼? –

+0

哦,對不起。我想寫這個到另一個問題。 – 2012-12-21 18:36:07

+0

@JonErickson,創建'控制= [[UISegmentedControl alloc] initWithItems:itemArray];'在viewDidLoad左右,並再次檢查。還要移動'[control addTarget:self action:@selector(unitSegmentControl :) forControlEvents:UIControlEventValueChanged];'viewDidLoad。 – iDev

回答

0

我不知道在一個UISegmentedControl什麼叫做的setSelected,但我會建議你使用:

control.selectedSegmentIndex = anNSInteger; 

設置初始選擇的片段。不過,我懷疑這是你的問題。

別的東西要考慮,如果你有一個滾動表視圖,

viewForHeaderInSection 

將獲得每次稱爲該節頭滾動到屏幕上,這意味着你的分段控制將得到重新初始化每一次頭滾動到屏幕上,你將失去你選擇的索引。

除此之外,也許你可以張貼代碼爲您unitSegmentControl選擇。可能是它導致表視圖重新加載,並且您的viewForHeaderInSection再次被調用,從而重新初始化您的分段控制器。

+0

這不是一個可滾動的表格,但我相信它與GVUserDefaults有關。我正在爲每個選定的索引設置一個屬性,我認爲這導致它重新初始化。所以,我剛回到NSUserDefaults並使用它。 –

+0

是的,任何導致您的表視圖重新加載將導致viewForHeaderInSection再次被調用並重置您的分段控制器。在其他地方保存分段控制器可能是個好主意,只需將其添加到viewForHeaderInSection方法的標題視圖中,而不是在那裏創建它,具體取決於您的應用程序的工作方式。 – Darren

+0

嗯,說實話,它沒有被重新加載,因爲一旦你碰了段,它會自動選擇一個你沒有選擇,它會保持選中,你不會是能夠取消選擇,或選擇另外一個,喜歡它凍結什麼的。 –