2

行が選択されたときに、PFQueryTableViewController内に新しいView Controllerをインスタンス化して提示するように設定された があります。UINavigationViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self objectAtIndexPath:indexPath]) { // Check our object exists
        MyNewViewController *card = [[MyNewViewController alloc] init];

        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:card];
        [nav.navigationBar configureFlatNavigationBarWithColor:[UIColor pomegranateColor]];
        [self presentViewController:nav animated:YES completion:^{}];
    }
    else { // Otherwise, do what we would have done.
        [super tableView:tableView didSelectRowAtIndexPath:indexPath];
    }
}

行を選択すると、新しいビュー コントローラーが表示される直前に、テーブル ビューが一番上までスクロールします (アニメーションではありません)。ユーザーが自分の居場所を追跡するのが難しくなるため、これが最初の問題です。

2 番目の問題は、新しいビュー コントローラーを終了してテーブル ビュー コントローラーに戻ると、最初のセルから下にスクロールできないことです。弾み、2 番目のセルが見えますが、下にはいきません。テーブルをリロードすると、スクロールが再び機能します。

上にスクロールしないようにするにはどうすればよいですか? また、上にスクロールした後にスクロールが制限されるのはなぜですか?

4

1 に答える 1

1

次のようなことを試してください:

@implementation PFQueryTableViewController
{
    UIViewController* _rootViewController;
    UINavigationController* _nav
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self objectAtIndexPath:indexPath]) { // Check our object exists
        MyNewViewController *card = [[MyNewViewController alloc] init];

        _nav = [[UINavigationController alloc] initWithRootViewController: card];
        [nav.navigationBar configureFlatNavigationBarWithColor: [UIColor pomegranateColor]];
        AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
        _rootViewController = appDelegate.window.rootViewController;

        [UIView transitionFromView: _rootViewController
                            toView: _nav.view
                          duration: 0.5
                           options: UIViewAnimationOptionTransitionFlipFromRight |
         UIViewAnimationOptionAllowUserInteraction    |
         UIViewAnimationOptionBeginFromCurrentState
                        completion: ^(BOOL finished)
         {
             appDelegate.window.rootViewController = nav;
             [appDelegate.window makeKeyAndVisible];
         }];
    }
    else { // Otherwise, do what we would have done.
        [super tableView:tableView didSelectRowAtIndexPath:indexPath];
    }
}

次に、navcontroller から、テーブルに戻るために次のメソッドを呼び出す必要があります。

- (void) returnToTheQueryTableViewController
{
    [UIView transitionFromView: _nav.view
                        toView: _rootViewController.view
                      duration: 0.5
                       options: UIViewAnimationOptionTransitionFlipFromRight |
     UIViewAnimationOptionAllowUserInteraction    |
     UIViewAnimationOptionBeginFromCurrentState
                    completion: ^(BOOL finished)
     {
         AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
         appDelegate.window.rootViewController = _rootViewController;
         [appDelegate.window makeKeyAndVisible];
     }];
}

これがお役に立てば幸いです。

于 2013-10-17T01:37:00.177 に答える