Функция DidSelectRow не вызывается - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь реализовать функцию didSelectRow и выполнить переход, но при запуске выбора ячеек ничего не происходит.

Я создал оператор печати, который также не запускается, что доказывает, что функция не работает. t похоже стреляет. Почему это должно быть?

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

import UIKit
import CoreData
    
    class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        
        let viewController = ListNameViewController()
        let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
        var itemChoosen = 0
        
        override func viewDidLoad() {
            super.viewDidLoad()
            homeListsTableView.delegate = self
            homeListsTableView.dataSource = self
            viewController.loadList()
            
        }
        
        @IBOutlet weak var homeListsTableView: UITableView!
        
        @IBAction func templatesButton(_ sender: Any) {
            
            tabBarController?.selectedIndex = 2
        }
        
        @IBAction func allListsButton(_ sender: Any) {
            tabBarController?.selectedIndex = 0
            
        }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            
            return viewController.listName.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
            let result = viewController.listName[indexPath.row]
            cell.textLabel?.text = ("\(String(result.listName!))")
            return cell
            
        }
        
        func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
            if editingStyle == .delete {
                context!.delete(viewController.listName[indexPath.row])
                viewController.listName.remove(at: indexPath.row)
                viewController.saveList()
                homeListsTableView.reloadData()
                
            }
        }
        
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            performSegue(withIdentifier: "items2", sender: self)
            print("selected")
        }
        
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(false)
            viewController.loadList()
            homeListsTableView.reloadData()
        }
        
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(true)
            homeListsTableView.reloadData()
        }
        
    }

ListNameViewController: 

import UIKit
import CoreData

class ListNameViewController: UIViewController, UITableViewDelegate {
    
    let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext
    var listName : [ListName] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        
        createButtonChange.isEnabled = false
        
        //Objective-C Line used to keep checking if the text field is vaild before enabling the submit button
        
        listNameValue.addTarget(self, action: #selector(textValidation), for: UIControl.Event.editingChanged)
    }
    
    @IBOutlet weak var listNameValue: UITextField!
    @IBOutlet weak var locationOption: UITextField!
    @IBOutlet weak var createButtonChange: UIButton!
    
    @objc func textValidation() {
        //Text Field Validation check before button is enabled
        if listNameValue.text!.isEmpty {
            createButtonChange.isEnabled = false
        } else {
            createButtonChange.isEnabled = true
        }
    }
    
    
    // Create a new List
    
    @IBAction func createButton(_ sender: Any) {
        
        let newList = ListName(context: context!)
        newList.listName = listNameValue.text
        saveList()
        self.navigationController!.popViewController(animated: true)
        viewWillAppear(false)
    }
    
    
    
    func saveList() {
        
        do {
          try context!.save()
        } catch {
          print("Error saving context \(error)")
      }
        
    }
    
    func loadList() {
          
          let request : NSFetchRequest<ListName> = ListName.fetchRequest()
          
          do{
            listName = try context!.fetch(request)
          } catch {
              print("Error loading categories \(error)")
          }
      }
    
    //Pass data to the HomeViewController
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       // let vc = segue.destination as! HomeViewController
        
    }
}

// закомментировано основные данные и просто использовал обычный массив для тестирования.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Вы добавляли переход в раскадровку для просмотра таблицы? В этом случае didSelect не вызывается, а вызывается подготовка (для перехода) контроллера tableview.

0 голосов
/ 04 августа 2020

Хорошо, решено - На странице был распознаватель жестов румянца. Убрал и работает по одному клику. Я видел, что если вы используете sh, чтобы сохранить жест, просто добавьте эту строку кода в начало функции:

 tap.cancelsTouchesInView = false

Прошло три дня, но я добился цели. Спасибо за помощь!

...