2012-05-11 13 views
2

私はいくつかのセルを持つテーブルビューを持っています。新しいセルを追加すると(モーダルビューコントローラを使用して)、ユーザーに新しく追加されたセルを表示したいと思います。これを行うには、テーブルビューを新しいセルにスクロールして選択し、すぐに選択を解除します。これを行うためのよりよい方法があります場合、私は思ったんだけどテーブルビューをセルにスクロールし、セルをフラッシュします。

- (IBAction)selectRow 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:7 inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
    [self performSelector:@selector(deselectRow:) withObject:indexPath afterDelay:1.0f]; 
} 

- (void)deselectRow:(NSIndexPath *)indexPath 
{ 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

今、私は、時限間隔の後に私のテーブルビューにdeselectRowAtIndexPathを送っています。それは正常に動作しますが、時にはテーブルが非常に長い場合など、時には異なる時間がかかる操作を実行する静的タイマーに頼るのが好きではありません。

編集:selectRowAtIndexPath:animated:scrollPositionは、UITableViewデリゲートメソッドが実行されないことに注意してください。 tableView:didSelectRowAtIndexPath:scrollViewDidEndDecelerating:も呼び出されません。ドキュメントから:tableView:willSelectRowAtIndexPath:またはtableView:didSelectRowAtIndexPath:メッセージを受信するためのデリゲートを起こさない、このメソッドを呼び出すと

、またそれはオブザーバーにUITableViewSelectionDidChangeNotification通知を送信します。

答えて

0

UITableViewDelegateは、UIScrollViewDelegateの拡張です。 UIScrollViewDelegateメソッドの1つを実装し、それを使用して行の選択を解除するタイミングを決定できます。 scrollViewDidEndDecelerating:は開始するのに適しているようです。

また、私は個人的には、1つのパラメータの制限のために制限する方法があります。私はGCDを使いたい。コードは次のようになります。GCDバージョンの

- (IBAction)selectRow 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:7 inSection:0]; 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
    //deselect the row after a delay 
    double delayInSeconds = 2.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
}); 

}

+0

感謝を。残念ながら、スクロール・ビューのデリゲートは通知されません。スクロールはユーザーが開始しないためです。チェックするために実装しましたが、手動でテーブルをスクロールするときにのみ呼び出されました。 –

+0

'scrollViewDidScroll:'を実装し、 'contentOffset.y'をチェックして、セルが可視かどうかを調べることができます。 –

関連する問題