Swift 未调用DidSelectRow函数

Swift 未调用DidSelectRow函数,swift,tableview,didselectrowatindexpath,Swift,Tableview,Didselectrowatindexpath,我试图实现didSelectRow函数并执行一个segue,但是当运行cells select时,什么也没有发生 我创建了一个也不运行的print语句,这证明函数似乎没有启动。为什么会这样 我已经检查了标识符是否正确,并且花了几个小时研究了许多堆栈溢出线程,但运气不好 import UIKit import CoreData class HomeViewController: UIViewController, UITableViewDelegate, UITableViewD

我试图实现didSelectRow函数并执行一个segue,但是当运行cells select时,什么也没有发生

我创建了一个也不运行的print语句,这证明函数似乎没有启动。为什么会这样

我已经检查了标识符是否正确,并且花了几个小时研究了许多堆栈溢出线程,但运气不好

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
        
    }
}
导入UIKit
导入CoreData
类HomeViewController:UIViewController、UITableViewDelegate、UITableViewDataSource{
让viewController=ListNameViewController()
让上下文=(UIApplication.shared.delegate为?AppDelegate)?.persistentContainer.viewContext
var itemChoosen=0
重写func viewDidLoad(){
super.viewDidLoad()
homeListsTableView.delegate=self
homeListsTableView.dataSource=self
viewController.loadList()
}
@IBOutlet弱var homeListsTableView:UITableView!
@iAction func templatesButton(uSender:Any){
tabBarController?已选择索引=2
}
@iAction func allListsButton(uSender:Any){
tabBarController?.selectedIndex=0
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回viewController.listName.count
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell=tableView.dequeueReusableCell(带有标识符:“cell”,用于:indexath)
让结果=viewController.listName[indexPath.row]
cell.textLabel?.text=(“\(字符串(result.listName!))”)
返回单元
}
func tableView(tableView:UITableView,commit editingStyle:UITableViewCell.editingStyle,forRowAt indexath:indexPath){
如果editingStyle==.delete{
context!.delete(viewController.listName[indexPath.row])
viewController.listName.remove(位于:indexPath.row)
viewController.saveList()
homeListsTableView.reloadData()
}
}
func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath){
性能检查(标识符为“items2”,发件人为self)
打印(“选定”)
}
覆盖函数视图将出现(uo动画:Bool){
super.viewwill出现(false)
viewController.loadList()
homeListsTableView.reloadData()
}
覆盖函数视图显示(u动画:Bool){
super.viewDidDisplay(true)
homeListsTableView.reloadData()
}
}
ListNameViewController:
导入UIKit
导入CoreData
类ListNameViewController:UIViewController、UITableViewDelegate{
让上下文=(UIApplication.shared.delegate为?AppDelegate)?.persistentContainer.viewContext
变量listName:[listName]=[]
重写func viewDidLoad(){
super.viewDidLoad()
createButtonChange.isEnabled=false
//Objective-C行用于在启用submit按钮之前持续检查文本字段是否可用
listNameValue.addTarget(自身,操作:#选择器(文本验证),用于:UIControl.Event.editingChanged)
}
@IBOutlet弱变量listNameValue:UITextField!
@IBOutlet弱var位置选项:UITextField!
@IBVAR createButtonChange:UIButton!
@objc func textValidation(){
//启用按钮之前的文本字段验证检查
如果listNameValue.text!.i为空{
createButtonChange.isEnabled=false
}否则{
createButtonChange.isEnabled=true
}
}
//创建一个新列表
@iAction func createButton(uSender:Any){
让newList=ListName(上下文:context!)
newList.listName=listNameValue.text
存储列表()
self.navigationController!.popViewController(动画:true)
视图将出现(false)
}
func保存列表(){
做{
尝试上下文!.save()
}抓住{
打印(“保存上下文时出错\(错误)”)
}
}
func加载列表(){
let请求:NSFetchRequest=ListName.fetchRequest()
做{
listName=try context!.fetch(请求)
}抓住{
打印(“加载类别时出错\(错误)”)
}
}
//将数据传递到HomeViewController
覆盖功能准备(对于segue:UIStoryboardSegue,发送方:有吗?){
//将vc=segue.destination设为!HomeViewController
}
}

//注释掉了核心数据,只使用了普通数组进行测试。

您是否在脚本中为tableview添加了segue?在这种情况下,不会调用didSelect,但会调用tableview控制器的prepare(for segue)。

确定解决了它-页面上有一个胭脂轻拍手势识别器。删除它,只需单击一次即可工作。我已经看到,如果您希望保留该手势,只需在函数顶部添加以下代码行:

 tap.cancelsTouchesInView = false

花了三天,但我到了那里。谢谢你的帮助

是否调用了其他UITableViewDataSource方法?像
cellForRowAt
?什么是
viewController
,它与tableView完全不同吗?是否混合元素?ListNameViewController用于向tableView添加一个新项,这样homeViewController就可以访问数据并从listName数组中显示数据。是否可以检查numberOfRowsInSection中返回的值?在情节提要环境中,默认初始值设定项
ListN