当我向上和向下滚动桌面视图时,单元格中的内容会重叠,为什么会这样,我该如何纠正呢?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NS
IndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] ;
}
UITextField* tf = nil ;
switch ( indexPath.row ) {
case 0: {
cell.textLabel.text = @"First Name" ;
tf = firstNameTextField = [self makeTextField:self. placeholder:@"F name"];
[cell.contentView addSubview:firstNameTextField];
break ;
}
case 1: {
cell.textLabel.text = @"Last Name" ;
tf = lastNameTextField = [self makeTextField:self.lastName placeholder:@"L name"];
[cell.contentView addSubview:lastNameTextField];
break ;
}
case 2: {
cell.textLabel.text = @"age" ;
tf = agetextfield = [self makeTextField:self.password placeholder:@"Age"];
[cell.contentView addSubview:agetextfield];
break ;
}
}
return cell;
答案 0 :(得分:1)
在这种情况下重复使用细胞。因此细胞与其他细胞重叠。只需修改您的代码即可解决此问题。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] ;
UITextField* tf = nil ;
for(UIView *view in [cell subViews]){
if([view isKindOfClass:[UITextFiel class]]){
[view removeFromSuperView];
}
}
switch ( indexPath.row ) {
case 0: {
cell.textLabel.text = @"First Name" ;
tf = firstNameTextField = [self makeTextField:self. placeholder:@"F name"];
[cell.contentView addSubview:firstNameTextField];
break ;
}
case 1: {
cell.textLabel.text = @"Last Name" ;
tf = lastNameTextField = [self makeTextField:self.lastName placeholder:@"L name"];
[cell.contentView addSubview:lastNameTextField];
break ;
}
case 2: {
cell.textLabel.text = @"age" ;
tf = agetextfield = [self makeTextField:self.password placeholder:@"Age"];
[cell.contentView addSubview:agetextfield];
break ;
}
}
}
return cell;
答案 1 :(得分:1)
每次重复使用单元格时,都会向单元格添加UITextField
。
我们的想法是仅在创建单元格时添加它,然后从现有单元格中获取现有视图
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
UITextField* tf = ...;
tf.tag = kMyTextFieldTag;
[cell.contentView addSubview:tf];
}
UITextField* tf = (UITextField*)[cell.contentView viewWithTag:kMyTextFieldTag];
tf.text = ...;
更好的想法是让UITextField
成为单元格的accessoryView
,而不是将其添加为子视图。
如果它没有产生所需的结果,请考虑制作自定义单元格,而不是向UITableViewCellStyleValue1
单元格添加视图。
答案 2 :(得分:0)
您的代码很好,但您永远不会从单元格的内容视图中删除“旧”子视图。因此,请在UITextField *tF = nil;
之前添加此代码:
for(UIView *v in cell.contentView.subviews){
[v removeFromSuperview];
}
答案 3 :(得分:0)
您需要将所有子视图(标签等)添加到您的cell.contentview中一次,这意味着您可以修改您的cellForRowAtIndexPath方法,如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] ;
UITextField* tf = nil ;
switch ( indexPath.row ) {
case 0: {
cell.textLabel.text = @"First Name" ;
tf = firstNameTextField = [self makeTextField:self. placeholder:@"F name"];
[cell.contentView addSubview:firstNameTextField];
break ;
}
case 1: {
cell.textLabel.text = @"Last Name" ;
tf = lastNameTextField = [self makeTextField:self.lastName placeholder:@"L name"];
[cell.contentView addSubview:lastNameTextField];
break ;
}
case 2: {
cell.textLabel.text = @"age" ;
tf = agetextfield = [self makeTextField:self.password placeholder:@"Age"];
[cell.contentView addSubview:agetextfield];
break ;
}
}
return cell;
}
每次重新加载单元格时,您都不需要在单元格中添加和删除子视图。