2010-03-13 118 views
1

我的代碼如下所示:iPhone:在推動viewcontroller之前等待selectrow動畫完成?

NSIndexPath *ip = [NSIndexPath indexPathForRow:15 inSection:0]; 
[[self tableView] selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionMiddle]; 

// Pause needed here until animation finishes 

[[self navigationController] pushViewController:secondView animated:YES]; 

現在它的動畫行的滾動/選擇和推動,同時視圖控制器。我希望它做的是等到它完成滾動/選擇,然後推動視圖控制器。有沒有可能的方法來做到這一點?謝謝

回答

2

當滾動結束時,tableview應該調用scrollViewDidEndScrollingAnimation。嘗試把推該方法:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 
{ 
    if (weShouldPushSecondView) 
    { 
     weShouldPushSecondView = NO; 
     [[self navigationController] pushViewController:secondView animated:YES]; 
    } 
} 

您可能需要使用您的selectRowAtIndexPath後立即設置爲YES,因爲scrollViewDidEndScrollingAnimation可以在其他時間用於其它卷軸被稱爲布爾伊娃。

+0

這幾乎是完美的!它無法捕捉的唯一情況是該行已經在屏幕上,因此不需要滾動來實現。在這種情況下,它只會突出顯示單元格,而不會調用此方法。有沒有辦法解決? – Mike 2010-03-14 08:51:55

+0

試試這個:調用indexPathsForVisibleRows,看看你選擇的單元格是否在數組中。如果是,請在那裏調用push(並且不要將weShouldPushSecondView設置爲YES)。如果單元格不在可見列表中,則將weShouldPushSecondView設置爲YES(並且不要在該處調用該按鈕,並在滾動完成時調用它)。您可能想要將bool的名稱更改爲pushSecondViewAfterScroll。 – DyingCactus 2010-03-14 15:09:07

0

是否有一個原因,你不在-tableView:didSelectRowAtIndexPath:委託方法中推視圖控制器?該方法應該在動畫完成後調用。

+0

didSelectRowAtIndexPath在selectRowAtIndexPath之後沒有被調用,這就是爲什麼我在這裏單獨推視圖控制器的原因 – Mike 2010-03-13 22:48:52