我正在使用Swift 3中的第一个应用程序。我正在使用tableView(通过“扩展MainController:UITableViewDataSource”)。从这个tableView,通过storyboard我有两个segues。一个用于编辑(通过单击附件图标),第二个用于更多详细信息屏幕(通过单击表格行)。我不是通过代码来调用这个segues,而是通过storyboard。
而我的问题是有时存在巨大的滞后。就像点击一行后,下一个屏幕显示30秒后。但现在总是。有时它立即工作。有趣的是,当我触摸第1行时,没有任何反应,接下来我点击第2行,然后第1行出现。
我也在使用委托,这是准备segues的代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// 1
if segue.identifier == "AddSensor" {
// 2
let navigationController = segue.destination
as! UINavigationController
// 3
let controller = navigationController.topViewController
as! AddController
// 4
controller.delegate = self
}
else if segue.identifier == "EditSensor" {
let navigationController = segue.destination
as! UINavigationController
let controller = navigationController.topViewController
as! AddController
controller.delegate = self
if let indexPath = tableView.indexPath(
for: sender as! UITableViewCell) {
controller.sensorToEdit = sensors[indexPath.row]
}
}
else if segue.identifier == "DetailSeq" {
let navigationController = segue.destination
as! UINavigationController
let controller = navigationController.topViewController
as! DetailController
controller.delegate = self
if let indexPath = tableView.indexPath(
for: sender as! UITableViewCell) {
controller.sensorRecieved = sensors[indexPath.row]
}
}
}
我读到这是iOS8中的常见错误,可以通过添加
来解决func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
DispatchQueue.main.async {
self.performSegue(withIdentifier: "DetailSeq",sender: self)
}
}
但它对我不起作用。我不知道接下来我该怎么做才能解决这个问题。谁能指导我?
答案 0 :(得分:0)
根据此SO question,如果您使用代码而不是故事板中的segue显示视图控制器,则可以修复错误。像这样的东西,你的目的地是你想去的VC。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:
NSIndexPath) {
DispatchQueue.main.async {
self.presentViewController(destination, animated: true) { () -> Void
in
}
}
}
答案 1 :(得分:0)
你必须这样使用:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
DispatchQueue.main.async {
self.performSegue(withIdentifier: "DetailSeq",sender: self)
}
}