2011-02-02 2 views
0

Я пытаюсь использовать scrollToRowAtIndexPath на 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

Я думаю, что вы, вероятно, могли бы сделать это по телефону -[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]; 
} 
2

От Graphics and Drawing in iOS:

Важно: Классы UIKit, как правило, не поточно. Все связанные с рисованием операции должны выполняться в основном потоке вашего приложения.

Вы можете использовать –performSelectorOnMainThread:withObject:waitUntilDone:, чтобы вызвать метод в основном потоке.

Смежные вопросы