2012-02-18 72 views
2

這對於專家來說可能是一個簡單的問題,但我無法弄清楚正確的解決方案。在iPhone中使用開關ON/OFF隱藏表格視圖單元格

在我的應用程序中,我創建了一個表視圖來列出一個no項。

在單元的第一行有一個開關(ON/OFF)。

所以我的客戶端需要在開關爲OFF時隱藏底部單元(除第零個單元外),並在開關爲ON時顯示所有單元。

我通過代碼創建了開關。

任何人都可以請幫助我如何做到這一點?

在此先感謝。

回答

6

numberOfRows數據源的方法 - 使它返回1和reloadTableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    /// .... 
      self.switchView = [[[UISwitch alloc] initWithFrame:CGRectZero]autorelease]; 
      cell.accessoryView = self.switchView; 
      [self.switchView setOn:NO animated:NO]; 
      [self.switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 

//.... 

} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if [self.switchView.on] 
     return 1; 
    else 
    { 
     // normal code return 
    } 
} 

- (void) switchChanged:(id)sender { 
    [self.tableView reloadData]; 
} 
+0

@mbh,這是一個UITableVIewDataSource方法,不是委託方法。 – 2012-02-18 06:46:53

+0

感謝您的更正。還添加了解釋代碼。 – mbh 2012-02-18 06:54:22

+0

我們能不能隱藏和顯示下面的單元格與小動畫,就像iOS本機設置的應用程序? – 2015-03-27 10:10:00

1

有所謂的tableView一個UITableViewDataSource方法:numberOfRows:inSections method.Just檢查開關的狀態,並返回1,如果它是OFF或全部行,如果它是ON。每次打開和關閉時調用[tableView reloadData]方法。就如此容易。

+0

當調用reloadData方法時,會按順序調用以下方法:1. tableView:numberOfSections:2 tableView:numberOfRows:inSection:3. tableView:cellForRowAtIndexPath:methodfs。所以當你打開和關閉時你必須調用它。 – 2012-02-18 06:50:34

5

你可以使用insertRowsAtIndexPaths,這不僅會增加,而且還做的加入新行

第一添加目標UIControlEventTouchUpInsideUISwitch的動畫。

[switch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];

- (空)switchChange:(UISwitch *)發件人{

 isSwitchOn = sender.on; //edited 
    [myTable beginUpdates]; 
    NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; 
    NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; 
    //you may add as many row as you want here. 

    [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationMiddle]; 
    [myTable endUpdates]; 

}

,並確保你將增加你多少行插入numberOfRowsInSection:

  • (NSInteger的)的tableView:(UITableView的*)的tableView numberOfRowsInSection:(NSInteger的)部分 {

    如果(isSwitchOn)返回1;

    else return 3; //多少行會對

切換後}

你可能要檢查[myTable insertSections:withRowAnimation:插入另一部分,做上述相同。但記得要說明你有多少部分添加,在numberOfSectionsInTableView:

UPDATE:

實施deleteRowsAtIndexPaths:如果關掉。

- (無效)switchChange:(UISwitch *)發件人{

isSwitchOn = sender.on; 

    if(isSwitchOn){ 
     [myTable beginUpdates]; 
     NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; 
     NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; 
     //you may add as many row as you want here. 

     [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationMiddle]; 
     [myTable endUpdates]; 
    } 
    else{ 
     [myTable beginUpdates]; 
     NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; 
     NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; 
     //you may add as many row as you want here. 

     [myTable deleteRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationFade]; 
     [myTable endUpdates]; 
} 

}

相關問題