2017-10-07 53 views
0

我面临这个问题,我没有得到任何明确的答案。我有一个UITableView,它在第一次加载时工作正常,但当它滚动时,它不可选,didSelectRowAtIndexPath永远不会接到呼叫。此外,我已经在我的手机按钮,它也不可点击。但我仍然可以滚动tableview。这是我的代码:iOS UITableView在滚动时不可选择

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 
     let cell : ContactTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ContactCell") as! ContactTableViewCell 

     cell.selectionStyle = .none 
     cell.backgroundColor = UIColor.clear 
     cell.delegate = self 

     let randomNumber = Int(arc4random_uniform(UInt32(colorsArray!.count))) 

     if(!shouldUseFilteredResults) { 

      cell.setFilteredContents(_with: addressBookArray![indexPath.row], theme: themeStyle!, randomColor: colorsArray![randomNumber]) 
     } 
     else { 

      cell.setFilteredContents(_with: filteredAddressBook[indexPath.row], theme: themeStyle!, randomColor: colorsArray![randomNumber]) 

      cell.contactNameLabel.attributedText = self.highlightSearchResult(resultString: cell.contactNameLabel.text!) 
     } 


     return cell 
    } 

在细胞:

public func setFilteredContents (_with contact : [String : Any], theme : Theme, randomColor : UIColor) 
    { 
     contactDictionary = contact; 

     contactNameLabel.text = String(describing: contact["FullName"]!) 

     self.setTheme(theme: theme, randomColor: randomColor) 

     if (contact["ImageDataString"] != nil) 
     { 
      let imageData = Data(base64Encoded: contact["ImageDataString"] as! String) 
      let image = UIImage(data: imageData!) 

      let imageView = UIImageView(frame: thumbnailView.bounds) 
      imageView.contentMode = .scaleAspectFill 
      imageView.layer.masksToBounds = true 
      imageView.layer.cornerRadius = CGFloat(imageView.height()/2) 
      imageView.image = image 
      thumbnailView.addSubview(imageView) 
     } 
     else { 

      self.setThumbnail(fullName: contactNameLabel.text!) 
     } 
    } 

private func setThumbnail(fullName : String) 
    { 
     let vibrancy = UIVibrancyEffect(blurEffect: UIBlurEffect(style: .light)) 
     let backgroundView = UIVisualEffectView(effect: vibrancy) 
     backgroundView.frame = thumbnailView.bounds 
     thumbnailView.addSubview(backgroundView) 

     let thumbNailLabel = UILabel(frame: thumbnailView.bounds) 
     thumbNailLabel.font = UIFont.systemFont(ofSize: 13) 
     thumbNailLabel.textColor = UIColor.white 
     thumbNailLabel.textAlignment = .center 

     var initialLettersString = String() 
     let wordsArray = fullName.components(separatedBy: NSCharacterSet.whitespaces) 

     for word in wordsArray 
     { 
      if(word != "") 
      { 
       initialLettersString.append(String(describing: word.characters.first!)) 
      } 
     } 

     if(initialLettersString.characters.count == 1) 
     { 
      initialLettersString = String(initialLettersString[..<initialLettersString.index(initialLettersString.startIndex, offsetBy: 1)]).uppercased() 
     } 
     if(initialLettersString.characters.count > 1) 
     { 
      initialLettersString = String(initialLettersString[..<initialLettersString.index(initialLettersString.startIndex, offsetBy: 2)]).uppercased() 
     } 

     thumbNailLabel.text = initialLettersString as String 

     backgroundView.contentView.addSubview(thumbNailLabel) 
    } 



private func setTheme(theme : Theme, randomColor : UIColor) 
    { 
     let isContactFavorite = contactDictionary?[Constants.TTCIsContactFavoriteKey] as? Bool 

     thumbnailView.backgroundColor = randomColor 

     if(theme == Theme.Light) 
     { 
      contactNameLabel.textColor = UIColor.black 
      lineView.backgroundColor = UIColor.lightGray 

      if(!isContactFavorite!) 
      { 
       favoritesButton.setImage(UIImage(named: "favorite_dark.png"), for: .normal) 
      } 
      else 
      { 
       favoritesButton.setImage(UIImage(named: "favorite.png"), for: .normal) 
      } 
     } 
     else if(theme == Theme.Dark) 
     { 
      contactNameLabel.textColor = UIColor.white 
      lineView.backgroundColor = UIColor.gray 

      if(!isContactFavorite!) 
      { 
       favoritesButton.setImage(UIImage(named: "favorite_white.png"), for: .normal) 
      } 
      else 
      { 
       favoritesButton.setImage(UIImage(named: "favorite.png"), for: .normal) 
      } 
     } 

     for view in thumbnailView.subviews 
     { 
      view.removeFromSuperview() 
     } 
    } 

定制手机: Custom Cell

可能是什么问题?

+0

你是不是可选择的意思是什么?没有选择的外观或didSelectRowAtIndexPath未被调用? – chengsam

+0

对不起我的不好,didSelectRowAtIndexPath没有得到调用 –

+0

你是否正确地设置tableview的委托和数据源在viewdidload或其他地方?只是确认。 – Tuhin

回答

0

你正在做的一切都是正确的。

只要检查您的按钮框架是否位于您的单元格内。

有时您的细胞高度较低,按钮超出细胞范围。

+0

cell.delegate = self in viewDidLoad()? –

0

这也可以在视图层次 覆盖默认的触摸事件与UITapRecognizer S的,因为删除任何tap recognizer S设定对UITableviewParent View

+0

我尝试删除所有水龙头识别器,但让我再试一次 –

0

谢谢大家的帮助。问题出在我用于CustomCell的SwipeCellKit。删除它解决了它!