Tap не работает внутри didSelectItemAt, он ни на что не реагирует. Кто-нибудь может помочь мне разобраться в этом вопросе?

#swift #uitableview #collectionview

#быстрый #uitableview uitableview #просмотр коллекции

Вопрос:

Вот мой полный код. MenuTableViewCell вызывается с другого контроллера. В нем отображаются данные и изображение. Но когда вы нажимаете на определенный раздел, кран не работает. После нажатия на него следует перейти к другому контроллеру представления. Все должно быть сделано программно.

#Меню просмотра ячейки.swift

импорт UIKit

класс MenuTableViewCell: UITableViewCell,UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

 var Labeltitle: UILabel?
var colView: UICollectionView?
//屏幕宽度
let SCREEN_WIDTH = UIScreen.main.bounds.width
//屏幕高度
let SCREEN_HEIGHT = UIScreen.main.bounds.height

var arrData = ["旅游英语","商务英语","基础英语","成人英语","少儿英语","青少英语","视频","师资"]

var collectionViewHeight: NSLayoutConstraint?

override func awakeFromNib() {
    super.awakeFromNib()


}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    // 设置选中cell时无高亮等效果
    self.selectionStyle = .none

    let layout = UICollectionViewFlowLayout()
    self.colView = UICollectionView(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: 680), collectionViewLayout: layout);
    self.colView?.register(MenuCollectionViewCell.self, forCellWithReuseIdentifier: "colCell")
    self.colView?.delegate = self
    self.colView?.dataSource = self
    self.colView?.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    self.colView?.showsHorizontalScrollIndicator = true
    self.colView?.allowsSelection = true
    
    self.colView?.allowsMultipleSelection = true
    
    //设置间距
    
    //设置水平间距
    layout.minimumInteritemSpacing = 0;
    //设置垂直间距
    layout.minimumLineSpacing = 0;
    
    
    //   layout.itemSize = CGSize(width: (SCREEN_WIDTH/3), height: 125)
    layout.itemSize = CGSize(width: (SCREEN_WIDTH/2), height: 170)
    
    
    self.contentView.addSubview(colView!)

}
//加载数据
func reloadData() {
    //collectionView重新加载数据
    self.colView?.reloadData()
    //更新collectionView的高度约束
    let contentSize = self.colView?.collectionViewLayout.collectionViewContentSize
    self.collectionViewHeight?.constant = contentSize!.height
}



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.arrData.count
}

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    
    return 1
}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "colCell", for: indexPath) as! MenuCollectionViewCell
    
    //self.colView?.isUserInteractionEnabled = true
    cell.title?.text = arrData[indexPath.row]
    cell.isSelected = true
    cell.contentView.isUserInteractionEnabled = false;
    
    switch indexPath.row {
    case 0:
    
        cell.imgView?.image = UIImage(named:"luyou")
        break
    case 1:
        cell.imgView?.image = UIImage(named:"shangwu")
        break
    case 2:
        cell.imgView?.image = UIImage(named:"jichu-1")
        break
    case 6:
        cell.imgView?.image = UIImage(named:"shiping")
        break
    case 4:
        cell.imgView?.image = UIImage(named:"shaoer")
        break
    case 5:
        cell.imgView?.image = UIImage(named:"qingshao")
        break
    case 3:
        cell.imgView?.image = UIImage(named:"chengren")
        break
    case 7:
        cell.imgView?.image = UIImage(named:"shiziti")
        break
    default:
         cell.imgView?.image = UIImage(named:"mainhead")
        break
    }
    
    return cell
}


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){

    if(network_status == 0){
        self.chrysan.show(.error, message:"没有网络", hideDelay: 1)
        return
    }

  let Publicmenu = PublicmenuViewController()

    switch indexPath.row {
    case 0:
   
        Publicmenu.menu = "旅游英语1"
        Publicmenu.menucateid = 3
        Publicmenu.menubanner = UIImage(named:"旅游英语")
    break
    case 1:
        Publicmenu.menu = "商务英语"
        Publicmenu.menucateid = 2
        Publicmenu.menubanner = UIImage(named:"商务英语")
    break;
    case 2:
        Publicmenu.menu = "基础英语"
        Publicmenu.menucateid = 9
        Publicmenu.menubanner = UIImage(named:"基础英语")
    break
    case 3:
          let Contentlist = TextbooklistViewController()
        Contentlist.menu = "成人英语"
        Contentlist.menucateid = 86
       // Publicmenu.menubanner = UIImage(named:"成人英语")
          first_ViewController()?.navigationController?.pushViewController(Contentlist, animated: true)
          return
    case 4:
         let Contentlist = TextbooklistViewController()
        Contentlist.menu = "少儿英语"
        Contentlist.menucateid = 84
       // Contentlist.menubanner = UIImage(named:"儿童英语")
        first_ViewController()?.navigationController?.pushViewController(Contentlist, animated: true)
          return
   
    case 5:
        let Contentlist = TextbooklistViewController()
        Contentlist.menu = "青少英语"
        Contentlist.menucateid = 85
      //  Publicmenu.menubanner = UIImage(named:"青少英语")
         first_ViewController()?.navigationController?.pushViewController(Contentlist, animated: true)
        return
    case 6:
      let videolist = PublicvideoViewController()
      videolist.menucateid = 39
      videolist.menu = "视频"
      videolist.menubanner = UIImage(named:"学员动态")
      first_ViewController()?.navigationController?.pushViewController(videolist, animated: true)
      return
    

    
    case 7:
        
    let teacher = TeacherViewController()
    first_ViewController()?.navigationController?.pushViewController(teacher, animated: true)
    return
    default:
        
    break
    }

    

    
    first_ViewController()?.navigationController?.pushViewController(Publicmenu, animated: true)
    
    
  //  self.navigationController?.pushViewController(tour, animated: true)
}




override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    
    // Configure the view for the selected state
}
 

}

Вот снимок экрана, когда я нажимаю на кого-либо из этого раздела, ничего не происходит. didSelectItemAt не вызывается.

поэтому, когда я нажимаю на определенный элемент изображения, нажатие не работает. Я попробовал решение self.colView?.isUserInteractionEnabled, установленное в true или false. Но это не сработало. Collectionview cellForItemAt работает. Но collectionview didSelectItemAt не работает. Я действительно не знаю, как заставить кран работать. Кто-нибудь может мне помочь?

Комментарии:

1. Вызывается ли didSelectItemAt вызов?

2. Привет, Шим, спасибо за повтор. Нет, он не вызывается.

3. Вы установили делегат представления коллекции?

4. Да, я это сделал. Как вы можете видеть код ниже

5. пусть layout = UICollectionViewFlowLayout() self.colView = UICollectionView(frame: CGRect.init(x: 0, y: 0, width: SCREEN_WIDTH, height: 680), collectionViewLayout: layout); self.colView? .register(MenuCollectionViewCell.self, forCellWithReuseIdentifier: «colCell») self.colView?.delegate = self self.colView?.DataSource = self

Ответ №1:

После выполнения отладки представления с помощью view debugger я обнаружил, что появился новый слой UITableViewCellContent. Это появилось после обновления xcode. Вместо того, чтобы выполнять self.addSubview(colView!), contentView.addSubview(colView!) решил проблему.