我正在尝试在tableView上使用scrollToRowAtIndexPath。 我正在使用下面的方法。
当我通过单击UIBarButtonItem调用此方法时,一切正常,意味着 - tableView滚动得很好。但是,当我从另一个线程调用此方法时,它不会滚动。
想法?
-(void)handleDiffView
{
NSIndexPath * ndxPath;
if ( !isLooking ) {
ndxPath= [NSIndexPath indexPathForRow:1 inSection:0];
}
else {
ndxPath= [NSIndexPath indexPathForRow:0 inSection:0];
}
[self.tableView scrollToRowAtIndexPath:ndxPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
答案 0 :(得分:2)
来自Graphics and Drawing in iOS:
重要说明:UIKit类通常不是线程安全的。所有与绘图相关的操作都应该在应用程序的主线程上执行。
您可以使用–performSelectorOnMainThread:withObject:waitUntilDone:在主线程上调用方法。
答案 1 :(得分:0)
我认为您可以通过调用-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]
来实现,如下所示:
// This will only be called from handleDiffView
- (void)handleDiffViewInMainThread:(NSIndexPath*)ndxPath
{
[self.tableView scrollToRowAtIndexPath:ndxPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
- (void)handleDiffView {
NSIndexPath * ndxPath;
if ( !isLooking ) {
ndxPath= [NSIndexPath indexPathForRow:1 inSection:0];
}
else {
ndxPath= [NSIndexPath indexPathForRow:0 inSection:0];
}
[self performSelectorOnMainThread:@selector(handleDiffViewInMainThread:)
withObject:ndxPath waitUntilDone:NO];
}