gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:37 26 4
gpt4 key购买 nike

I have a PFQueryTableViewController, which is set up to instantiate and present a new view controller, inside of a UINavigationViewController, when a row is selected.

- (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];
}
}

当我选择一行时, TableView 一直滚动(不是动画)到顶部,就在新 View Controller 出现之前。这是第一个问题,因为它使用户很难跟踪他们的位置。

第二个问题是,当我退出新的 View Controller ,返回到 TableView Controller 时,我无法从第一个单元格向下滚动。它反弹,我可以看到一些第二个细胞,但它不会下降。重新加载表格会导致滚动再次起作用。

如何防止滚动回到顶部,为什么滚动到顶部后限制滚动?

最佳答案

尝试这样的事情:

@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];
}];
}

希望对你有帮助。

关于ios - 呈现另一个 View Controller 将 UITableView 滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19416509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com