我有一个允许用户将条目添加到服务器端表的类。一切正常,直到我尝试使用新数据刷新UITableView
。我进行服务器调用以获取新数据集,使用它来刷新作为表的数据源的NSArray
,然后尝试重新加载表。以下是从服务器返回数据时调用的方法:
- (void) logEntriesRefreshed : (NSNotification *) notification {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"log_entries_refreshed"
object:nil];
NSLog(@"returned from log entries fetch");
_logEntriesArray = [LogEntriesDataFetcher getLogEntriesArray];
[_tableView reloadData];
_activityIndicator.hidden = YES;
[_activityIndicator stopAnimating];
NSLog(@"log entries array count: %lu", [_logEntriesArray count]);
[_tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO
scrollPosition:UITableViewScrollPositionNone];
}
最后一行就是问题所在。我想以编程方式选择表中的第一行(必须至少有一行,因为我刚添加了一行)。但似乎这条线永远不会执行。请注意这个方法,下一步应该是:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"here");
UITableViewCell *previousCell = (UITableViewCell *)[_tableView cellForRowAtIndexPath:_previousIndexPath];
previousCell.backgroundColor = [UIColor clearColor];
previousCell.textLabel.textColor = [SharedVisualElements primaryFontColor];
UITableViewCell *cell = (UITableViewCell *)[_tableView cellForRowAtIndexPath:indexPath];
cell.contentView.backgroundColor = [SharedVisualElements secondaryFontColor];
cell.textLabel.textColor = [SharedVisualElements primaryFontColor];
_previousIndexPath = indexPath;
// get the file attributes for the cell just selected
_currentEntry = (LogEntry *)[_logEntriesArray objectAtIndex:[indexPath row]];
NSLog(@"array count: %lu", (unsigned long)[_logEntriesArray count]);
NSLog(@"current entry: %ld", (long)[indexPath row]);
_isExistingEntry = YES;
_arrayPositionOfEntryBeingEdited = [indexPath row];
[self initializeValues];
[self initializeObjects];
[self captureStartingValuesForStateMachine];
}
我在selectRowAtIndexPath
行以及NSLog(@"here")
中的第一个didSelectRow...
行设置了断点。我到达selectRowAtIndexPath
行,但从未使用didSelectRow
方法。我的控制台输出与以下内容一致:
returned from log entries fetch
log entries array count: 7
这就是结束。 didSelectRow...
方法没有任何内容。也没有抛出任何错误。
我错过了什么。看起来非常简单,但我所做的一切似乎都无法发挥作用。
答案 0 :(得分:3)
根据Apple的文档,调用selectRowAtIndexPath
不会调用didSelectRowAtIndexPath
。看看here。
调用此方法不会导致委托接收 tableView:willSelectRowAtIndexPath:或 tableView:didSelectRowAtIndexPath:消息,也不发送 向观察者发出UITableViewSelectionDidChangeNotification通知。
要专门调用didSelectRowAtIndexPath
委托方法,请使用以下代码:
[[tableView delegate] tableView:tableView didSelectRowAtIndexPath:indexPath];
希望这有帮助。