2010-10-05 140 views
0

我有一个单独的类用于在各种视图中显示数据。插入/删除行时更新表格

有一个TableView用于删除/插入行。我有一个按钮在Edit/Done 之间变化以允许编辑。 “流是Singleton类中的变量”

并使用editingStyleForRowAtIndexPath允许选择哪个编辑样式用于每一行。

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ 

     int count = [streams count]; 
     int row = indexPath.row ; 

if (row == count) 

     return UITableViewCellEditingStyleInsert; 

    else 

     return UITableViewCellEditingStyleDelete;} 

我用的cellForRowAtIndexPath为与文本创建一个附加行“添加电话号码”,在编辑模式下。

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

static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
         DeleteMeCellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:DeleteMeCellIdentifier] autorelease]; 
} 
int x = indexPath.row; 
if (self.editing == YES) 
{ 
    if (indexPath.row == [streams count]) 

     cell.textLabel.text = @"Add Phone Number"; 

    else 
     cell.textLabel.text = [self.streams objectAtIndex:indexPath.row]; 
} 
else 
{ 
    cell.textLabel.text = [self.streams objectAtIndex:indexPath.row]; 
} 

return cell;} 

删除行正常工作。在选择插入一行时,另一个视图被压入堆栈。从这个视图中,用户被赋予许多文本选项来标记我们刚刚创建的新行。一旦选择完成,以下代码用于更新单例类。

- (void)viewWillDisappear:(BOOL)animated { 

Disc *disc = [Disc sharedDisc]; 
[disc.streams insertObject:@"0208" atIndex:0]; 
[super viewDidAppear:animated];} 

一旦该行的文本已被选中,用户必须选择返回按钮才能返回到前一个TableView。这是问题出现的时间。在主TableView,而不是一个选项标记为“添加电话号码” 有两个。

我知道TableView正在使用的singelton类已更新,它是不以正确方式更新的TableView。如果我然后切换编辑/完成tableView正确显示信息。

我试图更新ViewDidLoad & ViewWillAppear方法中的单例类,但结果相同,第一次重新加载视图时,它不会正确显示新行。

我想过重写“Back”BarButton来尝试让TableView正确显示。

回答

0

我不明白为什么重复行必须更新tableview。但是,听起来有点像你创建两个表,不知何故?或者甚至两个viewcontrollers在彼此之上,但我会假设你的导航代码设置正确(使用tabbars可能导致这与视图控制器初始化代码不正确)。

你一定想要任何改变ViewWillAppear中表格内容的东西。

即使在ViewDidLoad中更新(通常只在第一次出现视图时才调用),是否会获得重复的单元格?在导航回时执行,

如果您正在刷新表格数据,请使用ViewWillAppear中的[tableview reloadData]。

如果一切都失败了,为了追踪这个bug,我建议在tableView对象上添加表达式,并观察它改变(在调试模式下)。

+0

谢谢Henrik。无论使用ViewDidLoad还是ViewWillAppear,重复都会出现。我应该提到的是,有两个ViewController使用。如果我编辑代码,以便添加一行不会推新视图,而是更新Singeton类,然后调用[tableView Reload data],它可以很好地工作。从第二个tableView更新singelton并导航回第一个tableView时出现问题。 – user244295 2010-10-05 11:25:53