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]