对于专家来说,这可能是一个简单的问题,但我无法找到正确的解决方案。
在我的应用程序中,我创建了一个表格视图,列出了一个项目。
在单元格的第一行有一个开关(ON/OFF
)。
因此,当切换为OFF
时,我的客户端需要隐藏底部单元格(除了第0个单元格),并在切换为ON
时显示所有单元格。
我通过代码创建了切换。
任何人都可以帮我解决这个问题吗?
提前致谢。
答案 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]方法即可。就这么简单。