在UITableView中选择新添加的动态行

时间:2013-05-10 07:50:17

标签: ios ios5 uitableview

我在iPad中使用SplitViewController处理MasterDetail View,My Master View有一个tableView,我在其中动态添加行。所以新添加的行位于零位置。所以我想要实现的是,我想在添加到Master表后立即选择新添加的行。稍后,当用户添加新行时,应选择该行,并且应取消选择先前添加的行。

为此我写了下面的代码

- (void)selectNewlyAddedRow
{
            NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0];
        [m_tableView selectRowAtIndexPath:selectedCellIndexPath animated:TRUE scrollPosition:UITableViewScrollPositionNone];
        [self tableView:m_tableView didSelectRowAtIndexPath:selectedCellIndexPath];
}

如果我在函数ViewDidAppear中编写它,此代码可以工作,但如果我在cellForRowAtIndexPath中编写它,它就不起作用..

如果我出错了,请正确理解。

此致 兰吉特

2 个答案:

答案 0 :(得分:0)

viewDidAppear在添加新行时不会调用,因此您只需注册表重新加载通知,并在该通知调用的方法中选择第一行,我希望它能帮助您....

   - (void)selectFirstRow{

        if ([self.tableView numberOfSections] > 0 && [self.tableView numberOfRowsInSection:0] > 0) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
            [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
            [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
        }
    }

答案 1 :(得分:0)

实施此委托 -

   -(void)tableView:(UITableView )tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath)indexPath{ 
          [NSNotificationCenter defaultCenter]; 
          [notificationCenter postNotificationName:@"Table Reloaded" object:nil];
    } 

在视图控制器中,在viewdidload中添加此行

   -(void)viewDidLoad{ 
          [super viewDidLoad];
           [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableReloaded:) name:@"Table Reloaded" object:nil];
   }


  -(void) tableReloaded:(NSNotification*)notification{ 
        [self selectFirstRow];
  }