2013-07-18 21 views
1

我有一個UITableViewController有5個不同的部分,&每個部分包含一個單獨的單元格。在第1部分中,我有一個UISegmentedControl,默認情況下提供了兩個選項,第1部分被選中,所以其餘部分(其他4部分)與第1部分相對應。但是,我遇到的問題是:有能力切換到另一個UITableView有其他部分&細胞,將對應段2,當然當中選擇段2 2 UISegmentedControl如何使用UITableViewController使用UISegmentedControl?

我正在使用這個項目的故事板。

我知道如何達到這個目標的問題已經被問了一千次,而且我知道如何做到這一點,如果我正在使用常規視圖控制器,我是新手,使用UITableViewController,這真的給了我很難。

的事情,我曾嘗試:

一:我試圖刪除UITableViewController一起,然後用常規ViewController更換和分一個UITableView到主視圖。與此問題是,由於靜態單元需要UITableViewController工作,(不幸的是我正在使用靜態單元格),我被給出了xcode的錯誤。

二:我試圖隱藏從UISegmentedControl條件,只顯示適合的單元用適當的選擇單元格,但這並沒有工作,因爲我沒能加我的其他部分&在上面的細胞(如我會常與普通UIViewController

這是我用來嘗試方法#2的代碼:

- (IBAction)segmentedControl:(id)sender { 

    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; 
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex; 

    if (selectedSegment == 0) 
    { 
     upick= 0; 
     self.lengthCell.hidden=NO; 
     self.widthCell.hidden=NO; 
     self.depthCell.hidden=NO; 
     self.flowCell.hidden=YES; 

    } 
    else if (selectedSegment == 1) 
    { 
     upick =1; 
     self.lengthCell.hidden=YES; 
     self.widthCell.hidden=YES; 
     self.depthCell.hidden=YES; 
     self.flowCell.hidden=NO; 
    } 

} 

三:無數在網上的研究小時,但似乎無法找到我正在尋找的確切結果,大多數演示如何用UIViewController來做到這一點,對於這種特殊情況,步驟是不同的。

我真的很感激一些建議&從這裏拿走的全部方向,因爲我被卡住了。多謝你們!

+0

爲什麼不爲每種情況設置自定義單元格,並且在選擇分段控件的每個部分時選擇'reloadData'? – msgambel

+0

你是如何設置UISegmentedControl的?直接在故事板或編程? – Julius

回答

3
  1. 讓您的表格視圖控制器中需要的所有單元格都可用。

  2. 在您的表視圖的數據源的方法(即numberOfSectionsnumberOfRowsInSectioncellForRowAtIndexPath),您可以設置所有正確的數字和數據兩種狀態。

  3. 當分段控制改變時,你可以做兩件事。或者你只是reloadData,就像之前建議的那樣,但是你沒有得到任何動畫。或者您使用insertRowsAtIndexPaths:withRowAnimation:deleteRowsAtIndexPaths:withRowAnimation:來獲得動畫效果。

例如,案例1中的第1-2部分和案例2中的第3至6部分(第0部分爲最高部分);每個部分有兩行

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return _control.selectedSegmentIndex == 0 ? 3 : 4; 
} 

- (NSInteger)tableView:(UITableView *)tableView 
     numberOfRowsInSection:(NSInteger)section { 
    return section == 0 ? 1 : 2; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // .. the usual boilerplate 
    if (_control.selectedSegmentIndex == 0) { /* configure cell */ } 
    else { /*do the same for the other case */ } 
    return cell; 
} 

-(void)segmentedControlDidChange:(UISegmentedControl*)sender { 
    NSIndexSet *indexes; 
    [_tableView beginUpdates]; 
    if (sender.selectedSegmentIndex == 0) { 
     indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,4)]; 
     [_tableView deleteSections:indexes 
        withRowAnimation: UITableViewRowAnimationFade]; 
     indexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1,2)]; 
     [_tableView insertSections:indexes 
        withRowAnimation: UITableViewRowAnimationFade]; 
     [_tableView reloadSections:indexes 
        withRowAnimation: UITableViewRowAnimationNone]; 
    } 
    else { 
     // do the reverse 
    } 
    [_tableView endUpdates]; 
} 
+0

我喜歡用你的答案收到的結果,你介意發表一些示例代碼嗎?我很抱歉,我只是有點困惑,因爲我不太熟悉'UITableView',謝謝! @Mundi – vzm

+0

看我的代碼示例。 – Mundi

+0

使用故事板製作靜態單元時可以實現這一點嗎?@Mundi – vzm

0

如果我是正確的,你需要使用UISegmentedControl 2個表視圖之間切換。您可以使用UIViewController並向其中添加2個UITableViews,並將UISegmentedControl保留在表視圖之外。那麼可能你可以通過以下方法進行管理:

- (IBAction)segmentedControl:(id)sender { 

    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender; 
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex; 

    if (selectedSegment == 0) 
    { 
    //show Table1 and hide Table2 
    // Reload Table1 

    } 
    else if (selectedSegment == 1) 
    { 
    //show Table2 and hide Table1 
    // Reload Table2 
    } 

} 

希望這有助於。

+0

問題是,當我嘗試向我的TableViewController中添加另一個'UITableView'時,它不會將它從TableViewController中分離出來,而不像如果我這樣做正常的ViewController例如,所以在構建時,我得到以下錯誤,因爲添加了'UITableView''非法配置:靜態表視圖只有在嵌入UITableViewController實例時纔有效@NameName – vzm

+0

當然,這就是爲什麼使用tableview控制器可能不是一個好主意 – brainray

相關問題