我想在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
答案 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