2011-06-18 6 views
3

で選択テーブルビューセルを維持ユーザがUITableViewで細胞を選択した場合、私はUIPopoverを示します。ポップオーバーが解除されるまで、セルは選択されたままです。アプリ:アプリ画面

ユーザがデバイスを縦向きから横向きに回転させ、選択されたセルが画面の下部にある場合、回転後に消滅し、ポップオーバーが別の(無関係な)セルを指してしまいます。

は、どのように私は、画面上UITableView滞在中、選択セルが横向きに肖像画から回転したときにことを確認することができますか? UIPopoverを再配置するに

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    CGRect activeCellRect = [self.tableView rectForRowAtIndexPath:self.indexPath]; 
    if ((activeCellRect.origin.y + activeCellRect.size.height) > 
     (self.view.frame.origin.y + self.view.frame.size.height)) 
    { 
     // If a row ends up off screen after a rotation, bring it back 
     // on screen. 
     [self.tableView scrollToRowAtIndexPath:self.indexPath 
           atScrollPosition:UITableViewScrollPositionBottom 
             animated:YES]; 
    } 
} 

アップデート2、::

更新:はカレブのとkviksilverのコードを組み合わせることで、次は、実用的なソリューションであるスクロール命令した後、reloadDataメッセージを送信する必要がありますテーブルビューに移動します。その後rectForRowAtIndexPath:方法は正しくセル(そうでなければ、それはないスクロール・コマンドの後に正しく更新されないであろうと)の新しい位置を報告します!姿勢の変化に

答えて

4

...のようなもの、あなたのセルが表示されているかどうかを確認するためにindexPathsForVisibleRowsをチェックしてからでない場合scrollToRowAtIndexPathを使用してみてください:右、

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    if (![[self.tableView indexPathsForVisibleRows] containsObject:[self.tableView indexPathForSelectedRow]]) { 
     [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForSelectedRow] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
    } 
} 
+0

1:atScrollPosition:アニメーション:. – Caleb

+0

あなたのコードをありがとうございますが、まだ問題があります: '[self.tableView indexPathsForVisibleRows]'はローテーションの後にrows配列の "reduced"サイズを返しません。しかし、Calebが '-rectForRowAtIndexPath:'メソッドを使うという提案はうまくいきます。 – user8472

2
あなたはすでに選択された行知っ

を?また、デバイスオリエンテーションがいつ変化するかを知っているか、少なくともそれを知ることができます。なぜなら、UIViewControllerメソッドがあるからです。あなたはのUITableViewの-rectForRowAtIndexPath:メソッドを使用して、選択した行の矩形を取得することができ、そしてそれは長方形がのUITableViewが継承UIScrollViewのの-scrollRectToVisible:animated:メソッドを使用して、表示されたままになりますことを確認するのは簡単です。 -scrollToRowAtIndexPathため

+0

kviksilverのメソッドに続いて、 '-scrollToNearestSelectedRowAtScrollPosition:animated:'もあります。これは、私が1つのステップで説明したほとんどのように聞こえます。 – Caleb

+0

iはば完全scrollToNearestSelectedRowAtScrollPosition :-D – kviksilver

+0

@kviksilver忘れ、私は完全に '-scrollToRowAtIndexPath ...'あなたはそれを言及するまで忘れてしまいました。チームワーク。 ;-) – Caleb