5

アプリケーションにピーク アンド ポップ機能を実装しようとしていますが、まだテストできないため、正しく実行できているかどうかを知りたいのですが、何か問題があると思いますか?

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location 
{
    NSLog(@"TEST");

    NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:location];

    if (indexPath) {
        UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
        NSDictionary *dict = [self.array objectAtIndex:indexPath.row];
        cell.textLabel.text = [dict objectForKey:@"name"];

        DetailViewController *previewController = [[DetailViewController alloc] init];
        //     previewController.content = content;

        previewingContext.sourceRect = cell.frame;

        return previewController;
    }

return nil;
}
4

3 に答える 3

6

私は現在これをアプリに実装していますが、それはほとんど正しいようです。私が遭遇した問題は、場所で指定された座標が、UITableView ではなく、UIViewController のビューに対するものであることです。設定によっては同じかもしれませんが、私の場合、場所を UITableView の座標に変換する必要がありました。

CGPoint convertedLocation = [self.view convertPoint:location toView:self.tableView];

もちろん、走行距離は異なる場合があります。

于 2015-09-30T15:38:20.513 に答える
3

previewDelegate を正しい sourceView に登録した場合は、場所を修正する必要はありません。だから代わりに

[self registerForPreviewingWithDelegate:self sourceView:self.view];

次のように登録する必要があります。

[self registerForPreviewingWithDelegate:self sourceView:self.tableView];

次に、デリゲート呼び出しから取得した場所は、スクロール/ contentOffset を考慮に入れます。

于 2016-02-09T03:13:51.803 に答える
1

コードの唯一の問題は、convertedLocation を取得する方法が正しくないことです。

以下のコードは、テーブル ビューをスクロールした後でも正しい位置を取得します。

CGPoint convertedLocation = [self.tableView convertPoint:location fromView:self.view];

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:convertedLocation];
于 2015-11-19T05:45:20.610 に答える