手动滚动UITableViewController到顶部

时间:2015-05-20 02:06:53

标签: ios uitableview swift uiscrollview

我正在调用以下方法将UITableViewController滚动到顶部。

func scrollTableToTop() {

    tableView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: true)

}

我在这个函数中尝试了几行代码,并且所有代码都返回相同的错误,这是我无法理解的。

以下是完整错误:

Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-3347.44/UITableView.m:6245

此网站列出的类似错误似乎会导致应用在加载任何单元格之前崩溃。但是我的tableView在加载单元格时功能齐全。该错误使应用程序完全正常运行,但不会滚动到顶部。

由于点击状态栏成功地将UITableViewController以我想要的确切行为滚动到顶部这一事实引起了更多的混淆,但我创建的函数将无法运行。

修改:

根据要求,以下是我的scrollTableToTop()方法的调用方式。 在连接到我的tabBarController的.swift文件中:

class tabBarController: UITabBarController, UITabBarControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
}

//Scroll to top when tab is pressed
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
    if homeIsCurrentlyVisible == true {
        println("Should scroll home-page to top")
        homeTableViewController().scrollTableToTop()        
    }

}

homeIsCurrentlyVisible是在true出现时设置为homeTableViewController的通用变量,当false消失时设置为homeTableViewControllerdequeueReusableCellWithIdentifier:forIndexPath:是需要滚动到顶部的tableView。

编辑2:

我有一些见解!我重新搜索stackoverflow以查找此错误,即使这些帖子似乎与我的问题无关。

答案建议将dequeueReusableCellWithIdentifier:替换为fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)。 一旦尝试,当我点击标签栏scrollTableToTop时我崩溃了,错误:println()

我不确定导致错误差异的是什么。

接下来,可能更重要的是解决这个问题,我将我的代码填充到override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? { println("cellForRowAtIndexPath 1") super.tableView.cellForRowAtIndexPath(indexPath) //let myCell = tableView.dequeueReusableCellWithIdentifier("tableViewCell", forIndexPath: indexPath) as! TableViewCell let myCell = tableView.dequeueReusableCellWithIdentifier("tableViewCell") as! TableViewCell println("cellForRowAtIndexPath 2") //This line DOES NOT PRINT ...insert more random code here... return myCell } 的边缘,以找出崩溃发生的位置。

以下是我的结果:

dequeueReusableCellWithIdentifier:forIndexPath:

第一行打印到控制台,然后应用程序在第二行之前崩溃。我非常肯定这是应用程序崩溃的界限。 此外,如果我返回serviceid = request.form.get('serviceid') areaid = request.args.get('areaid') ,第二行也不会打印,但应用程序不会崩溃。

为什么我的scrollTableToTop函数导致应用程序崩溃?

为什么点击状态栏滚动到顶部不会导致问题?

0 个答案:

没有答案