我有一个UITableView的代码,我在网上找到了两列。每当我向其添加另一行时它都可以正常工作,但是当我选择一行来删除它时,只需删除最后一行。我只是使用[NSMutableArray addObject:]将行添加到数组的底部,但是当我删除一行时,我首先选择要删除的行。
这里选择行------(我检查以确保tableViewIdx是正确的)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
tableViewIdx = [indexPath row];
}
然后删除按钮------(我检查确保对象实际上已从数组中删除)
-(IBAction)bt_DeletePressed:(id)sender{
[mutableArray removeObjectAtIndex:tableViewIdx];
//delete actual content
for(int i = VStableViewIdx;i<10;i++){
g_vitals[i] = g_vitals[i+1];
}
[TableView reloadData];
tableViewIdx--;
}
和一些tableView代码
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
int count = [listData count];
if(self.editing) count++;
tableSize = count;
return count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 60.00,tableView.rowHeight)] autorelease];
[cell addColumn:60];
label.font = [UIFont systemFontOfSize:12.0];
label.text = textView.text;
[formatter release];
label.textAlignment = UITextAlignmentRight;
label.textColor = [UIColor blueColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(70.0, 0, 60.0,tableView.rowHeight)] autorelease];
[cell addColumn:500];
label.font = [UIFont systemFontOfSize:12.0];
label.text = [NSString stringWithFormat:@"%d",respRateTemp];
label.textAlignment = UITextAlignmentRight;
label.textColor = [UIColor blueColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:label];
}
return cell;
}
为什么它会删除最后一行而不是选择的那一行?
编辑:我实际上能够自己修复它,使用deleteRowsAtIndexPaths:而不是updateData,但是现在我有另一个问题。我的程序在模拟器上运行正常,但在设备上经常崩溃。它出现了错误:编程接收信号:“EXC_BAD_ACCESS”。
数据格式化程序暂时不可用,将在“继续”后重试。 (找不到dlopen函数,因此无法加载共享库。)
答案 0 :(得分:0)
“cellForRowAtIndexPath”委托存在问题。 根据你的逻辑tableview dequeueReusableCells索引号,这导致最后一行丢失而不是删除所选行。可能是你可以改变cellForRowAtIndexPath中的逻辑,或者你可以使用适当的数据结构&amp;用于管理表视图的算法。