我正在使用UITableView分组来显示我的应用程序首选项 我得到了这个细胞:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger section = [indexPath section];
NSInteger row = [indexPath row];
NSInteger identifier = row + ((section + 1) * 10);
NSString *CellIdentifier = [NSString stringWithFormat:@"CustomCellIdentifier-%d",identifier];
LoginTableViewCell *cell = (LoginTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"LoginTableViewCell" owner:self options:nil];
cell = [topLevelObjects objectAtIndex:0];
cell.field.tag = identifier;
if (section == 0) {
switch (row) {
case 0:{
NSString *user = [[NSUserDefaults standardUserDefaults] valueForKey:@"username"];
cell.field.text = user;
cell.label.text = @"User";
break;
}
case 1:{
NSString *bundleName = [[NSBundle mainBundle] bundleIdentifier];
NSError *error = nil;
NSString *user = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"];
NSString *pwd = [SFHFKeychainUtils getPasswordForUsername:user andServiceName:bundleName error:&error];
cell.field.text = pwd;
cell.field.secureTextEntry = YES;
cell.label.text = @"Password";
break;
}
case 2:{
NSString *numero = [[NSUserDefaults standardUserDefaults] valueForKey:@"numero"];
cell.field.text = numero;
cell.field.keyboardType = UIKeyboardTypePhonePad;
cell.label.text = @"Number";
break;
}
default:
break;
}
if (cell.field.text > 0) {
cell.field.enabled = NO;
cell.field.borderStyle = UITextBorderStyleNone;
}
} else {
switch (row) {
case 0:{
cell.field.text = [NSString stringWithFormat:@"+%@", [[NSUserDefaults standardUserDefaults] valueForKey:@"prefix"]];
cell.field.keyboardType = UIKeyboardTypePhonePad;
cell.label.text = @"Prefix";
break;
}
case 1:{
cell.field.text = [[NSUserDefaults standardUserDefaults] valueForKey:@"sender"];
cell.field.keyboardType = UIKeyboardTypeNamePhonePad;
cell.label.text = @"Sender";
break;
}
default:
break;
}
}
}
return cell;
}
问题是,当一行滚动到窗口外时,文本字段变空。 我怎样才能防止这种情况发生? 我认为缓存是正确的解决方案,但即使使用可重用的标识符,我仍然遇到同样的问题。
答案 0 :(得分:0)
您正在使用的方法,即从nib文件加载表格单元格,需要 - 为了拥有正确的可重用单元格支持 - 在nib“Identifier”字段中指定您在代码中使用的相同字符串标识符。也就是说,如果用于缓存双端队列的单元标识符是“MyCellId”,那么nib文件中的UITableCellView“Identifier”字段必须包含相同的“MyCellId”标识符。 但是使用你所遵循的方法是不可能的,因为单元ID是动态生成的,然后你当然不能动态地将单元标识符分配给加载nib的单元。 理论上,您必须为您生成的每个MyCellId-%d标识符创建一个特定的nib文件。 假设您只定义了一个表格单元格,请删除动态标识符生成并使用静态名称,然后将此名称分配给单元格nib文件中的“标识符”字段。