我正在建立一个应用程序,其中我有一个tableview,我的用户可以在其中输入员工的信息。对于几乎所有可以添加到我的Employee对象的属性,我需要一个textfield,除了一个:我需要在tableview中有一个单元格来包含一个UISegmentedControl。
现在,这就是我最初想要这样做的方式
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
InfoCell *cell = (InfoCell *) [tableView dequeueReusableCellWithIdentifier:@"InfoCell"];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"InfoCell" owner:self options:nil];
cell = (InfoCell *) [nib objectAtIndex:0];
}
if (tableView == infoTable) {
cell.title.text = employeeInfoArray[indexPath.row];
cell.content.tag = indexPath.row;
cell.content.placeholder = @"Vul hier de gegevens in.";
cell.contentSegmentedControl.hidden = YES;
//determine textfield content
if (indexPath.row == 0) {
cell.content.text = employee.userID;
cell.contentSegmentedControl.hidden = YES;
} else if (indexPath.row == 1) {
cell.content.text = employee.password;
cell.contentSegmentedControl.hidden = YES;
}else if (indexPath.row == 2) {
cell.content.text = employee.name;
cell.contentSegmentedControl.hidden = YES;
}else if (indexPath.row == 3) {
NSMutableArray *companies = [[NSMutableArray alloc] init];
for (int i = 0; i < store.companies.count; i++) {
Company *companyClass = store.companies[i];
[companies addObject:companyClass.companyKey];
}
cell.contentSegmentedControl.hidden = NO;
cell.contentSegmentedControl = [[UISegmentedControl alloc] initWithItems:companies];
cell.contentSegmentedControl.tag = 2222;
[cell.contentSegmentedControl addTarget:self action:@selector(segmentedControlEvent:) forControlEvents:UIControlEventValueChanged];
cell.content.hidden = YES;
}
}
cell.backgroundColor = [UIColor clearColor];
return cell;
}
请注意,我从这个概述中删除了很多单元格,因为你从这个例子中得到了系统的本质,只有很少的单元格:每次加载一个单元格时,它会检查它有哪个索引路径,以及需要做的是,将textfield
(称为content
)设置为隐藏,或将contentSegmentedControl
设置为隐藏。
我遇到的问题是,当我正常向上和向下滚动我的桌面视图时,它会正确显示所有内容。但是,当我开始快速向前和向后滚动时,我将contentSegmentedControll放在各种不属于它的单元格中。
我非常好奇为什么会这样,以及如何解决这个问题。我自己的建议是添加多个自定义tableviewcells,但我不知道如何正确地做到这一点。
简而言之:
我如何防止我的uisegmentedcontrol(仅在我的tableViewCells
中有一个)在滚动时在随机单元格中弹出?
答案 0 :(得分:0)
您确定在未粘贴的每种情况下都隐藏了segmentedControl吗?如果没有,试试这个:
if (indexPath.row == 3) {
cell.segmentedControl.hidden = YES;
} else {
cell.segmentedControl.hidden = NO;
}
并删除在其他地方引用segmentedControl的代码
答案 1 :(得分:0)
加载包含UISegmentedControl
的单元格时可能会出现延迟,因为每次滚动时,单元格必须在显示单元格之前填充companies
数组。
要解决此问题,请考虑降低companies
数组的加载频率,例如,将其值存储在property
中,并调用tableView:reloadData
甚至更好tableView:reloadRowsAtIndexPaths:withRowAnimation
如果数组companies
的内容发生变化。