2017-01-21 4 views
-1

Привет, ребята, я пробовал несколько дней, и ответа не найдено. Я уже внедрил UITableViewDelegate и UITableViewDataSource, прежде чем поднимать этот вопрос, мои didSelectRowAt и didDeselectRowAt, оба метода не работают. enter image description hereМетод DidSelectRow не называется

class SearchClass: UIViewController, UITableViewDataSource,UITableViewDelegate, UISearchBarDelegate { 

@IBOutlet weak var myTableView: UITableView! 
@IBOutlet weak var mySearchBar: UISearchBar! 

var objects:PFObject! 

var searchResults = [String]() 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    self.navigationController?.navigationBar.topItem?.title = "Search" 
    self.navigationController?.navigationBar.barTintColor = UIColor.white 
    self.navigationController?.navigationBar.backgroundColor = UIColor.black 
    self.navigationController?.navigationBar.tintColor = UIColor.black 
    self.searchResults.removeAll() 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.myTableView.dataSource = self 
    self.mySearchBar.delegate = self 
    self.myTableView.delegate = self 


    self.navigationController?.extendedLayoutIncludesOpaqueBars = true 

    //self.myTableView.reloadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) 
{ 
    searchBar.resignFirstResponder() 
    // self.navigationController?.navigationBar.isHidden = false 
    self.mySearchBar.endEditing(true) 
    print("Search word = \(searchBar.text)") 

    let query = PFQuery(className:"myClass") 
    //let newText = searchBar.autocapitalization 
    searchBar.autocapitalizationType = .none 
    searchBar.text = searchBar.text?.localizedLowercase 
    query.whereKey("collegeNickName", contains: searchBar.text) 

    query.findObjectsInBackground { (results, error) in 
     if error == nil { 

      if let objects = results { 

       self.searchResults.removeAll(keepingCapacity: true) 

       for object in objects { 
        let firstName = object.object(forKey: "myName") as! String 
        let image = object.object(forKey: "myImage") as! PFFile 
        // let lastName = object.object(forKey: "myPlace") as! String 
        // let fullName = firstName + " " + lastName 
        self.searchResults.append(firstName) 

        print(self.searchResults[0]) 
        DispatchQueue.main.async { 
         self.myTableView.reloadData() 
         self.mySearchBar.resignFirstResponder() 
        } 
       } 
      } 

     } else { 

      let myAlert = UIAlertController(title:"Alert", message:error?.localizedDescription, preferredStyle:UIAlertControllerStyle.alert) 

      let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil) 

      myAlert.addAction(okAction) 

      self.present(myAlert, animated: true, completion: nil) 
      return 


       } 
      } 
     } 

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { 
    //self.navigationController?.navigationBar.isHidden = true 
} 


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return searchResults.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "myCell") 

    let myCell = myTableView.dequeueReusableCell(withIdentifier: "myCell") 

    myCell?.textLabel?.text = searchResults[indexPath.row] 
    print(searchResults[indexPath.row]) 
    return myCell! 
} 


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print("Hi") 
} 

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

} 

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) 
{ 
    mySearchBar.resignFirstResponder() 
    mySearchBar.text = "" 
    myTableView.reloadData() 
} 

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { 
    //self.mySearchBar.resignFirstResponder() 
    //self.mySearchBar.endEditing(true) 
    self.definesPresentationContext = true 
} 

@IBAction func refreshButtonTapped(sender: AnyObject) { 
    mySearchBar.resignFirstResponder() 
    mySearchBar.text = "" 
    self.searchResults.removeAll(keepingCapacity: false) 
    self.myTableView.reloadData() 
    } 
} 

Также реализует SearchView я получаю то, что я хочу найти, но не может использовать выбрать и отменить методы в моем классе.

+0

Связать свой 'datasource' тоже, как вы это сделали с' delegate.' –

+0

Я сделал это раньше, но приложение вылетает, когда я открываю SearchTab –

+0

Подождите 5 мяты, которые я проверяю. –

ответ

1
self.myTableView.dataSource = self 
self.myTableView.delegate = self 

< --- добавить это.

+0

вы можете видеть, что я уже сделал это, –

+0

добавьте его в свой код. у вас есть только .datasource = self там, насколько я могу видеть –

+0

Я видел 'mySearchView.delegate' как' myTableView.delegate', работающий как шарм. Спасибо, что указали мою ошибку –

0

В Interface Builder

  • Connect dataSourceиdelegate из My Table View в SearchClass

Затем вы можете удалить избыточное значение self.myTableView.dataSource = self в SearchClass

Учитывайте, что соединения в Interface Builder более эффективны, чем в коде.

0

Объявление о неисправности ячейки. Вы сделали это ниже код

let myCell = myTableView.dequeueReusableCell(withIdentifier: "myCell") 

правого форматом

let myCell = tableView.dequeueReusableCell(withIdentifier: "myCell") 

Причина: При использовании DEQUEUE свойства, то UITableView Dequeue своей ячейки по парам он получил от метода

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

см. Есть параметр tableView, но вы обходите отход UITableView.

Смежные вопросы