带有 UILabel 内容的 UITableViewCell 在滚动时发生变化

Posted

技术标签:

【中文标题】带有 UILabel 内容的 UITableViewCell 在滚动时发生变化【英文标题】:UITableViewCell with UILabel content changing on scroll 【发布时间】:2018-08-16 13:17:56 【问题描述】:

请检查下面的代码和图像以了解,

我使用UITableView 进行配置文件编辑,每个单元格都包含带有旧数据的UILabel。输入新的详细信息并自动滚动后,值是对旧数据的更改。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return identifiersAry.count;

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    EditProfileTableViewCell *cell = (EditProfileTableViewCell *)[tableView dequeueReusableCellWithIdentifier:[identifiersAry objectAtIndex:indexPath.row]];

    switch (indexPath.row) 

        case NAME_CELL:
            nameTxtFld = cell.firstNameTxtLbl;
            name = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"name"];
            cell.firstNameTxtLbl.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"name"];
            break;

        case UserName_Cell:
            userNameTxtFld = cell.userNameTxtFld;
            cell.userNameTxtFld.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"userName"];            
            break;

        default:
            break;
   

   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

   return cell;

【问题讨论】:

这是因为您使用的是来自 NSUserDefaults 的值,而不是来自实例变量的值。您需要存储每个文本字段的当前值,并需要在 cellForRowAtIndexPath 中显示和使用它 为什么不用静态tableviewcontroller?这样您就可以为不同单元格的文本字段输出不同的变量。 用户输入时是否保存数据?如果不是,它将从NSUserDefaults 读取,它仍将保存旧数据... 我为我的问题给出了答案,检查一次,如果有任何修改,它对我有用,请分享@Ladislav 【参考方案1】:

它解决了,我只是使用 'YES' 获取初始布尔值,当它第一次加载从 NSUserDefaults 存储的所有数据时,当加载最后一个单元格时,我只是更改 'NO' 值然后它对我有用谢谢。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return identifiersAry.count;


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    EditProfileTableViewCell *cell = (EditProfileTableViewCell *)[tableView dequeueReusableCellWithIdentifier:[identifiersAry objectAtIndex:indexPath.row]];

    switch (indexPath.row) 

        case NAME_CELL:
            nameTxtFld = cell.firstNameTxtLbl;
            name = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"name"];
            if (isEnteringFirstTime)
            cell.firstNameTxtLbl.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"name"];
            break;

        case UserName_Cell:
            userNameTxtFld = cell.userNameTxtFld;
            if (isEnteringFirstTime)
            cell.userNameTxtFld.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"user"] objectForKey:@"userName"];  
           isEnteringFirstTime = NO;
            break;

        default:
            break;
    

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

    return cell;

【讨论】:

以上是关于带有 UILabel 内容的 UITableViewCell 在滚动时发生变化的主要内容,如果未能解决你的问题,请参考以下文章

UITableView中的UILabel

根据 JSON 文件中的内容文本调整带有 UILabel 的自定义单元格的大小

仅更改默认 UILabel 的 UIAppearance

带有单行文本的 UILabel 的行间距

在使用视图 iOS 滚动 uilabel 时保持标签文本与屏幕中心对齐?

带有自动布局的 uilabel 使用填充调整大小