DidSelectRow 不工作

DidSelectRow is not working

几乎如标题所说:DidSelectRow 没有被调用,我确实检查过我没有使用 Deselect。我还检查了 delegateDataSource 是否连接到 tableViewControllerSelectionSingle Selection。但是,该方法仍未被调用。

tableView 是否会对它有任何影响(它为空的原因是因为用户开始填充它。我正在使用 CoreData )?

编辑

方法是这样的:

 var effectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
    var effect: UIVisualEffect!
    let defaults = UserDefaults.standard
    var userMagazineTitle = [User]()
    var dataString = String()

override func viewDidLoad() {
        super.viewDidLoad()
        addProgrammatically()

        let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
        do{
            let users = try PresistanceService.context.fetch(fetchRequest)
            self.userMagazineTitle = users
            self.tableView.reloadData()
        }catch{
            ProgressHUD.showError("Nothing to see here")
        }

    } 

 / MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return userMagazineTitle.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyFeedTableViewCell
        cell.myHeadline?.text = userMagazineTitle[indexPath.row].title
        cell.indentationLevel = 3
        return cell
    }

    // Override to support editing the table view.
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        let manage = PresistanceService.persistentContainer.viewContext
        let del = userMagazineTitle[indexPath.row]

        if editingStyle == .delete {
            // Delete the row from the data source
            manage.delete(del)
            do{
                try manage.save()
            }catch{
                ProgressHUD.showError()
            }

            let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")

            do{
                userMagazineTitle = try manage.fetch(fetchRequest) as! [User]
            }catch{
                ProgressHUD.showError()
            }
            tableView.reloadData()
        }
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.performSegue(withIdentifier: "showUser", sender: indexPath)
        navigationController?.navigationBar.isHidden = false
        tableView.deselectRow(at: indexPath, animated: true)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showUser" {
            let DestViewController = segue.destination as! UINavigationController
            let targetController = DestViewController.topViewController as! CompanyTableViewController
            let indexPath = sender as! IndexPath
            let user = userMagazineTitle[indexPath.row].title
            let user2 = userMagazineTitle[indexPath.row].rssurl
            targetController.customUserInit(articlesindex: indexPath.row, title: user!, rssUrl: user2!)
        }

    }

    func addProgrammatically() {
        effectView.frame = view.bounds
        tableView.addSubview(effectView)

        effectView.translatesAutoresizingMaskIntoConstraints = false
        if #available(iOS 11.0, *) {
            effectView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
        } else {
            // Fallback on earlier versions
            effectView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
        }
        effectView.heightAnchor.constraint(equalTo: self.view.heightAnchor).isActive = true
        effectView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true

        effect = effectView.effect
        effectView.effect = nil

        self.tableView.separatorStyle = .none
        tableView.backgroundView = UIImageView(image: UIImage(named: "myMagazines.jpg"))
        tableView.backgroundView?.contentMode = .scaleAspectFill
        tableView.clipsToBounds = true
        navigationController?.navigationBar.isHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        navigationController?.navigationBar.isTranslucent = false
        navigationController?.navigationBar.barStyle = .black
        navigationController?.navigationBar.tintColor = .white
        navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    }

}

这个问题可能有两个问题:

  1. TableView DidSelectRow 的方法签名可能有误。当前签名为:

    Swift: func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

    目标 C:- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

  2. 您在代码的某处将 TableView 的委托设置为 nil。

您在 tableview 之上添加了一个 UIVisualEffectView 视图,它没有将触摸事件传递给 tableview。

设置 effectView.isUserInteractionEnabled = false,应使此视图将触摸事件传递给下面的视图。

另一个可能导致问题的原因是未选择选择种类。我花了两个小时来解决这个问题。

交叉检查单元格选择,如果选择了不选则改为单选。 要以编程方式执行此操作:

Swift : tableView.allowsSelection = YES;

Objective C: [tableView allowsSelection : YES];

================================

这可能对某人有帮助!