• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:44:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 PFQueryTableViewController,它设置为在选择一行时在 UINavigationViewController 内实例化并呈现一个新的 View Controller 。

- (void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath *)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];
    }
}

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

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

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



Best Answer-推荐答案


试试这样的:

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

- (void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath *)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 调用 next 方法返回表:

- (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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap