【问题标题】:How to scroll to tableview row?如何滚动到 tableview 行?
【发布时间】:2010-11-04 00:28:29
【问题描述】:

我有一个继承自 UITableViewDelegate 和 UIScrollViewDelegate 的 UIViewController(名为 VC)。之前的 UIViewController 加载 VC 是这样的:

[self.view addSubview:VC.view];

这意味着 viewWillAppear 不会触发。我可以在上述行之后添加该方法:

[VC viewWillAppear];

但是它会在 cellForRowAtIndexPath 之前触发,这会在我尝试滚动时导致空的 tableview 引用。

我想在加载 VC 时滚动到表中的特定行。但是因为我不知道 tableview 的 cellForRowAtIndexPath 什么时候完成(缺少 viewWillAppear),所以我没有地方放滚动代码。我已经保留了对 tableview 的引用,并且可以将其用于滚动。但是滚动码可以放在哪里呢?

【问题讨论】:

    标签: iphone cocoa-touch uitableview uiviewcontroller uiscrollview


    【解决方案1】:

    您的意思是您的 UIViewController 符合 UITableViewDelegate 和 UIScrollViewDelegate 协议而不是“继承”?

    您可以直接从您的父视图控制器调用 [VC viewWillAppear:]。如果 VC 处理的视图始终是另一个视图控制器视图的子视图,那么您真的需要一个完整的 UIViewController 实例来支持您的 UITableView 吗?您可以只为表格视图提供委托和数据源实现。

    然后,您可以在定义表视图的 NIB 中(通过在 Interface Builder 中添加对象)或在当前是 VC 父级的视图控制器的 viewDidLoad 方法中实例化您的委托和数据源。

    【讨论】:

    • 是 - “符合”。 VC 有一个关联的 NIB,所以它需要是一个 ViewController。我明白你的意思是让 NIB 实例化 tableview 委托,但话又说回来,scrollTo 代码去哪里了?
    • 父VC何时/何地调用:[self.view addSubview:VC.view];
    【解决方案2】:


    当然,当新视图控制器的视图添加并变得可见时,它会调用 viewDidAppear 而不是 viewWillAppear。我会把滚动代码贴在那里。

    如果这仍然不起作用,请尝试延迟 init 方法。像这样的:

    [self performSelector:@selector(myScrollingFunction) withObject:nil afterDelay:2.0];
    

    尽管您的视图控制器的视图可能并不总是在相同的时间后出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多