#objective-c #ios
#objective-c #iOS
Вопрос:
Я добавил несколько ячеек в tableview, и в каждой ячейке справа есть текстовое поле, позволяющее пользователям вводить тексты. Я также добавил для этого пользовательский класс cell. Я обнаружил, что при прокрутке вниз и возврате назад ввод первых нескольких строк исчезнет. Кто-нибудь знает, в чем проблема?
вот фрагмент моего кода
@implementation MyCell
-(void)setData:(NSString*)str
{
UIImage *image = [UIImage imageNamed:@"cellImage copy.png"];
[[self imageView ]setImage:image];
lblLocations=[[UILabel alloc]init];
lblLocations.textAlignment=UITextAlignmentLeft;
lblLocations.backgroundColor = [UIColor clearColor];
lblLocations.font = [UIFont boldSystemFontOfSize:12];
lblLocations.numberOfLines = 2;
lblLocations.lineBreakMode = UILineBreakModeWordWrap;
lblLocations.textAlignment = UITextAlignmentCenter;
lblLocations.text =str ;
NSLog(@"the title is%@",str);
[[self contentView]addSubview:lblLocations];
[lblLocations release];
txtUnits=[[UITextField alloc]init];
[txtUnits setAdjustsFontSizeToFitWidth:YES];
txtUnits.textAlignment = UITextAlignmentCenter;
txtUnits.returnKeyType = UIReturnKeyDone;
txtUnits.autocapitalizationType = NO;
txtUnits.textColor = [UIColor blackColor];
//following condition is not working when i'm scrolling up after writing into some of cell's text fields or i can say never working at all
if ([textDict valueForKey:[NSString stringWithFormat:@"%d",rowNum]]) {
[txtUnits setText:[textDict valueForKey:[NSString stringWithFormat:@"%d",rowNum]]];
}
else
{
[txtUnits setPlaceholder:@"0.00"];
}
[txtUnits setValue:[UIColor blackColor]
forKeyPath:@"_placeholderLabel.textColor"];
[[self contentView]addSubview:txtUnits];
txtUnits.backgroundColor = [UIColor clearColor];
txtUnits.delegate = self;
[txtUnits release];
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
[textDict setObject:textField.text forKey:[NSString stringWithFormat:@"%d",rowNum]];
}
and cellforrow....
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell=nil;
if (cell == nil) {
cell = [[[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier androw:[indexPath row]] autorelease];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
NSMutableDictionary *dict=(NSMutableDictionary*)[locations objectAtIndex:[indexPath section]];
NSMutableArray *array=(NSMutableArray*)[dict objectForKey:@"locationsArray"];
MyCell *modelObj=(MyCell*)[array objectAtIndex:indexPath.row];
NSLog(@"the values of the array are%@",modelObj.title);
NSString *str = modelObj.title;
[(MyCell *)cell setData:str];
return cell;
}
Какой должна быть логика для проверки того, введен ли текст в текстовое поле конкретной ячейки? Пожалуйста, помогите!
Ответ №1:
Хммм — почему вы переназначаете myCell при каждом вызове cellForRowAtIndexPath ? Мне кажется, вы должны предпочесть что-то вроде:
static NSString *CellIdentifier = @"Cell";
MyCell* cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
...
}
Также кажется странным, что вы также используете свой класс view в качестве класса модели — как поддерживается вспомогательный locations
словарь? Если на самом деле экземпляры модели совпадают с экземплярами представления, почему дублирование?