2017-10-02 8 views
1

私はSwift 3で私の最初のアプリケーションで作業しています。私はtableView(「拡張MainController:UITableViewDataSource」によって)を使用しています。そしてこのテーブルビューから、ストーリーボードで私は2つのセグを持っています。 1つは編集用(アクセサリアイコンをクリック)、もう1つは詳細画面(テーブル行をクリック)です。私はこのコードをコードではなくストーリーボードで呼んでいます。スウィフトでのテーブルビューの遅れ

私の問題は、時には大きな遅れがあるということです。行をクリックした後と同様に、30秒後に次の画面が表示されます。しかし今はいつも。ときどきすぐに働きます。興味深いのは、1行目に触れても何も起こらないとき、次に2行目をクリックして1行目が表示されていることです。

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) 
} 
} 

しかし、それを追加することで解決できることが読んでいた:私も、デリゲートを使用しています

、これは準備seguesのためのコードがあります私のために働いていませんでした。この問題を解決するために次に何をすべきかわかりません。誰も私を導くことができますか?

+0

あなたは*ラグなし*この作業を持って、その後、遅れを見始めましたか?もしそうなら、あなたは何を変えましたか?あなたがそれを始めることが決してなかったら、小さく始めて段階的に進みたいと思うかもしれません...単純なビューコントローラにセグエイティングを試みてください - デリゲートもデータの受け渡しもありません。他の部分で追加を開始します。 – DonMag

+0

Segueではなく、Segueと呼ばれています。 G、no Q. – LinusGeffarth

+0

これはチェックする価値があります。あなたは "didSelectRowAtIndexPath"を実装していて、 "選択解除"に重点を置いていないことを確認できますか?過去に実装したインスタンスが "DeSelect"して、選択解除時にのみセグがトリガーされます。また、より多くのコードを投稿できますか? – TheAppMentor

答えて

0

このSO questionによれば、ストーリーボードのコードではなくコードでView Controllerを表示すると、バグを修正できる場合があります。あなたの行き先があなたが行きたいVCであるこのようなもの。あなたはこのように使用する必要が

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

    DispatchQueue.main.async { 
     self.presentViewController(destination, animated: true) {() -> Void      
       in 

     } 
    } 
} 
0

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    DispatchQueue.main.async { 
     self.performSegue(withIdentifier: "DetailSeq",sender: self) 
    } 
} 
関連する問題