菜鸟教程小白 发表于 2022-12-12 15:44:25

ios - 呈现另一个 View Controller 将 UITableView 滚动到顶部


                                            <p><p>我有一个 <code>PFQueryTableViewController</code>,它设置为在选择一行时在 <code>UINavigationViewController</code> 内实例化并呈现一个新的 ViewController 。</p>

<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if () { // Check our object exists
      MyNewViewController *card = [ init];

      UINavigationController *nav = [ initWithRootViewController:card];
      ];
      ;
    }
    else { // Otherwise, do what we would have done.
      ;
    }
}
</code></pre>

<p>当我选择一行时,表格 View 会一直滚动(非动画)到顶部,就在新 ViewController 出现之前。这是第一个问题,因为它使用户很难跟踪他们的位置。</p>

<p>第二个问题是当我退出新的 ViewController ,返回表格 ViewController 时,我无法从第一个单元格向下滚动。它弹跳起来,我可以看到第二个单元格的一部分,但它不会降低。重新加载表格会导致滚动再次起作用。</p>

<p>如何防止它滚动回顶部,为什么它在滚动到顶部后限制滚动?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>试试这样的:</p>

<pre><code>@implementation PFQueryTableViewController
{
    UIViewController* _rootViewController;
    UINavigationController* _nav
}

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

      _nav = [ initWithRootViewController: card];
      ];
      AppDelegate* appDelegate = (AppDelegate*)[ 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;
             ;
         }];
    }
    else { // Otherwise, do what we would have done.
      ;
    }
}
</code></pre>

<p>然后你需要从 navcontroller 调用 next 方法返回表:</p>

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

<p>希望对你有所帮助。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 呈现另一个 ViewController 将 UITableView 滚动到顶部,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19416509/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19416509/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 呈现另一个 View Controller 将 UITableView 滚动到顶部