2017-08-28 1 views
-1

スウィフト3のテーブルビューコントローラーで検索結果からセグをしようとしていますが、self.performSegue(withIdentifier: "teacherDetail", sender: self)を使用すると、 。最初のセルをタップすると、そのセルが選択されているようにグレー表示され、別のセルを選択しない限り何も実行されません。次に、最初のセルからの情報を使用してセグを詳細ビューコントローラにプリフォームします。self.performSegue(withIdentifier: "teacherDetail"、送信者:self)は2タップを必要とします

import UIKit 

var name = "" 

class DirectoryTC: UITableViewController, UISearchResultsUpdating { 
    var teachers = ["Mr. Delano", "Mr. Antani", "Mr. Botelho", "Mr. Braga"] 
    var filteredTeachers = [String]() 

    var searchController: UISearchController! 
    var resultsController = UITableViewController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.resultsController.tableView.dataSource = self 
     self.resultsController.tableView.delegate = self 

     self.searchController = UISearchController(searchResultsController: self.resultsController) 
     self.tableView.tableHeaderView = self.searchController.searchBar 
     self.searchController.searchResultsUpdater = self 
     definesPresentationContext = true 
    } 

    func updateSearchResults(for searchController: UISearchController) { 
     self.filteredTeachers = self.teachers.filter{ (teacher:String) -> Bool in 
      if teacher.lowercased().contains(self.searchController.searchBar.text!.lowercased()) 
      { 
       return true 
      }else 
      { 
       return false 
      } 
     } 

     self.resultsController.tableView.reloadData() 
    } 

    // MARK: - Table view data source 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     if tableView == self.tableView 
     { 
      return self.teachers.count 
     }else 
     { 
      return self.filteredTeachers.count 
     } 

    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell = UITableViewCell() 

     if tableView == self.tableView 
     { 
      cell.textLabel?.text = self.teachers[indexPath.row] 
     }else 
     { 
      cell.textLabel?.text = self.filteredTeachers[indexPath.row] 
     } 

     return cell 
    } 

    override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 

     DispatchQueue.main.async(){ 

      if tableView == self.tableView 
      { 
       name = self.teachers[indexPath.row] 
      }else 
      { 
       name = self.filteredTeachers[indexPath.row] 
      } 

      self.performSegue(withIdentifier: "teacherDetail", sender: self) 
     } 

    } 
} 

ここでは、私がセグをしようとしているビューコントローラの迅速なファイルを示します。

import UIKit 

class DirectoryDetailVC: UIViewController{ 
    @IBOutlet weak var test: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     test.text = name 
    } 
} 
+1

"didDeselectRowAt'を' didSelectRowAt'に変更します。 – rmaddy

+0

また、なぜ非同期でディスパッチしていますか?選択はUIイベントですので、すでにメインキューに入っています – Paulw11

+0

DirectoryDe​​tailsVCクラスにコンパイルエラーが表示されていませんか?あなたはテストのテキストを名前に設定しているので、そのクラスに名前変数はありません! – user3407319

答えて

0

rmaddyはそれをキャッチしました。それはタイプミスでした。 "Typo - 変更didDeselectRowAtlectRowAtdidSelectRowAt"

0

あなたのストーリーボードビューコントローラ名がteacherDetailであることを確認してください -

DispatchQueue.main.async { self.performSegue(withIdentifier: "teacherDetail", sender: self)} 

を使用する代わりに

self.performSegue(withIdentifier: "teacherDetail", sender: self) 
関連する問題