我有一个UITableView,允许用户动态地向表中添加行。 UITableView最初以0行开始。每行都是一个自定义的UITableViewCell,它包含两个独立的UITextField:一个保存文本,一个保存数字。 UITableView有一个显示4行的可见区域,然后在添加每个新行时滚动。每当用户添加一个新行时,我都会在NSMutableDictionary中的UITableView中添加先前添加的行中的值,其中键是name字段中的值,值来自number字段。
我成功地将行添加到UITableView,并成功将数据存储到我的NSMutableDictionary中。然而,我的问题是,在添加我的行之后,如果用户决定向上或向下滚动UITableView,突然之间,用户输入的表行中的数据完全关闭。
以下是我所谈论的屏幕截图:
它应该是什么样的:
滚动到顶部时的样子:
以下是我正在使用的相关代码:
- (IBAction)addChoice:(id)sender {
if ([self.tableData count] > 0) {
NSString *name = [[(MyCustomCell *)[self.choiceTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableData count]-1 inSection:0]] nameField] text];
NSString *number = [[(MyCustomCell *)[self.choiceTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableData count]-1 inSection:0]] priceField] text];
if (name && price) {
[self.tableDictionary setObject:number forKey:name];
}
}
NSString *theObjectToInsert = [NSString stringWithFormat:@"Row #: %lu", (unsigned long)[self.tableData count]];
[self.tableData addObject:theObjectToInsert];
NSIndexPath *newPath=[NSIndexPath indexPathForRow:self.tableData.count-1 inSection:0];
[self.choiceTable insertRowsAtIndexPaths:@[newPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.choiceTable scrollToRowAtIndexPath:newPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
[[(MyCustomCell *)[self.choiceTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableData count]-1 inSection:0]] nameField] becomeFirstResponder];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if ([self.tableDictionary count] > 0) {
NSArray *keys = [self.tableDictionary allKeys];
if ([indexPath row] == 0) {
cell.nameField.text = keys[indexPath.row];
cell.numberField.text = self.tableDictionary[keys[indexPath.row]];
} else if ([indexPath row] <= ([self.tableDictionary count]-1)) {
cell.nameField.text = keys[indexPath.row-1];
cell.numberField.text = self.tableDictionary[keys[indexPath.row-1]];
} else {//if the row was just added by the user, display a table with empty fields
cell.nameField.text = @"";
cell.numberField.text = @"";
}
}
[cell.contentView setBackgroundColor:[UIColor colorWithRed:0.89 green:0.36 blue:0.01 alpha:1.0]];
return cell;
}
任何人都可以看到我做错了什么吗?
答案 0 :(得分:1)
NSDictionary值未订购。
您正在添加值并期望订购它们... 使用NSArray,或者为字典值指定键名,并通过键名而不是索引来获取