我在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中编写它,它就不起作用..
如果我出错了,请正确理解。
此致 兰吉特
答案 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];
}