2017-10-07 1 views
0

Ich stehe vor diesem Problem und bekomme keine klare Antwort. Ich habe eine UITableView, die gut funktioniert, wenn es zum ersten Mal lädt, aber wenn es scrollt, ist es nicht wählbar, didSelectRowAtIndexPath bekommt nie einen Anruf. Auch ich habe Knopf in meiner Zelle, es ist auch nicht anklickbar. Aber ich kann immer noch Tabellenansicht scrollen. Dies ist mein Code:iOS UITableView kann beim Scrollen nicht ausgewählt werden

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 
    } 

in der Zelle:

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() 
     } 
    } 

Individuelles Cell: Custom Cell

Was das Problem sein könnte?

+0

Was meinst du mit nicht auswählbar? Kein ausgewähltes Aussehen oder didSelectRowAtIndexPath nicht aufgerufen? – chengsam

+0

Entschuldigung, mein Fehler, didSelectRowAtIndexPath wurde nicht aufgerufen –

+0

Haben Sie den Delegaten und die Datenquelle Ihrer Tabellenansicht ordnungsgemäß in viewdidload oder anderswo festgelegt? Einfach bestätigen. – Tuhin

Antwort

0

Sie machen alles richtig.

Überprüfen Sie einfach Ihre Schaltfläche Frame liegt in Ihrer Zelle.

Manchmal ist die Zellenhöhe geringer und die Schaltfläche befindet sich außerhalb der Zellgrenzen.

+0

cell.delegate = selbst in viewDidLoad()? –

0

Dies kann auch wegen des überwiegenden Standardberührungsereignisse mit UITapRecognizer s in der Ansicht Hierarchie Entfernen Sie alle tap recognizer s auf zu UITableviewParent View

+0

Ich habe versucht, alle Tap Recognizer zu entfernen, aber lass es mich nochmal versuchen –

0

Danke an alle für die Hilfe. Problem war mit SwipeCellKit, die ich für CustomCell verwendet habe. Entfernen löste es!

Verwandte Themen