ViewController在didSelectRowAtIndexPath中缓慢呈现

时间:2015-05-19 10:44:22

标签: ios objective-c uitableview swift uistoryboard

我想在didSelectRowAtIndexPath上显示下一个ViewController,并且发生如下。

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var section = indexPath.section
        var row = indexPath.row
        var cell:UITableViewCell = self.tblView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
      cell.textLabel?.text = "hello"
       return cell
   }

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        frequentVC = storyboard.instantiateViewControllerWithIdentifier("frequentVC") as? DropOffFrequentVC
        self.presentViewController(frequentVC!, animated: true,completion: nil)
    }

显示了nextViewController,我将UIViewController视为self.dismissViewControllerAnimated(true, completion:nil)并再次调用之前的UIViewController,但现在当我等待一段时间并再次尝试呈现UIViewController时,调用UIViewController非常慢,但会立即调用didSelectRowAtIndexPath。在等待期间,如果我在任何地方点击查看,则会立即显示UIViewController。此外,如果我tapp两次,UIViewController会立即显示。

这是项目: https://drive.google.com/open?id=0B6dTvD1JbkgBN0J3SkFOTDJtZlU&authuser=0

2 个答案:

答案 0 :(得分:5)

我遇到过很多次。

我不完全理解为什么这可以解决问题,但它确实有效。

animated

确保UITableViewCell为false并在呈现视图控制器之前调用此方法。

我的假设:

选定的细胞是第一个响应者。 因此它负责呈现新的视图控制器。 因此滞后。 我们无法看到实际的viewDidLoad代码,因为它是私有的,但其中的某些内容负责延迟执行该操作。

注意:上面的回答说滞后是由于使用故事板。 这是错误的,因为我没有使用故事板,我仍然得到滞后。

答案 1 :(得分:0)

我下载了你的代码。打开ViewController时没有遇到任何延迟。它可能取决于您计算机上的性能(如果像我一样在模拟器中运行)。

但是,您绝对应该对代码进行一些更改。首先看看如何构建故事板。你现在在代码中创建了很多用户界面,这在用户表示明显不好的情况下会更难。每次调用UILabel时始终创建新的cellForRowAtIndexPath和其他UI元素都是不好的做法。

其次在故事板中使用seques也可以让您的生活更轻松。跳过presentViewController并改用performSegueWithIdentifier和其他方法。通过在视图之间拖动,可以直接在“界面”构建器中创建许多逻辑。

http://www.raywenderlich.com/81879/storyboards-tutorial-swift-part-1