2017-08-28 80 views
-1

我想從swift 3中的tableview控制器的搜索結果中繼續,但是當我使用self.performSegue(withIdentifier: "teacherDetail", sender: self)時,它似乎在選擇單元格時掛起。如果我點擊第一個單元格,它將顯示爲灰色,就像它被選中一樣,然後除非我選擇另一個單元格,否則不會執行任何操作。然後,它會使用來自第一個單元格的信息將segue預執行到詳細視圖控制器。self.performSegue(withIdentifier:「teacherDetail」,sender:self)需要兩次敲擊

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

    } 
} 

而這裏是視圖控制器的swift文件,我試圖繼續。

import UIKit 

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

    override func viewDidLoad() { 
     super.viewDidLoad() 

     test.text = name 
    } 
} 
+1

錯字 - 將'didDeselectRowAt'更改爲'didSelectRowAt'。 – rmaddy

+0

另外,你爲什麼異步調度;選擇是一個用戶界面事件,所以你將已經在主隊列 – Paulw11

+0

是不是在DirectoryDe​​tailsVC類中顯示任何編譯錯誤?因爲你將測試的文本設置爲名稱,並且該類中沒有名稱變量! – user3407319

回答

0

rmaddy抓住它。這是一個錯字。 「Typo - 將didDeselectRowAtlectRowAt更改爲didSelectRowAt

0

確保你的故事板視圖控制器的名字是teacherDetail - 使用

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

代替

self.performSegue(withIdentifier: "teacherDetail", sender: self) 
相關問題