在iPhone中用开关ON / OFF隐藏表格查看单元格

时间:2012-02-18 06:26:56

标签: iphone objective-c xcode

对于专家来说,这可能是一个简单的问题,但我无法找到正确的解决方案。

在我的应用程序中,我创建了一个表格视图,列出了一个项目。

在单元格的第一行有一个开关(ON/OFF)。

因此,当切换为OFF时,我的客户端需要隐藏底部单元格(除了第0个单元格),并在切换为ON时显示所有单元格。

我通过代码创建了切换。

任何人都可以帮我解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:6)

numberOfRows dataSource方法 - 使其返回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];
} 

答案 1 :(得分:5)

您可以使用insertRowsAtIndexPaths,这不仅可以添加,还可以添加新行的动画

首先将目标UIControlEventTouchUpInside添加到UISwitch

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

  

- (void)switchChange :( UISwitch *)sender {

       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)section   {

         

    if(isSwitchOn)返回1;

         

    否则    返回3; //开启后会有多少行

  •   
     

}

您可能需要检查[myTable insertSections:withRowAnimation:以插入另一部分并执行与上述相同的操作。但请记住在numberOfSectionsInTableView:

中说明要添加的部分

更新:

如果关闭,

实施deleteRowsAtIndexPaths:

  

- (void)switchChange :( UISwitch *)sender {

    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]; 
 }
     

}

答案 2 :(得分:1)

有一个名为tableView的UITableViewDataSource方法:numberOfRows:inSections方法。只需检查开关状态,如果是OFF则返回1,如果是ON则返回所有行。每次打开和关闭时,只需调用[tableView reloadData]方法即可。就这么简单。