2016-11-11 17 views
5

kod TenViewController:Swift jak zaznaczenie komórek kolekcji

class TenViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 
     var selectedCell: UICollectionViewCell! 
     var arrayLocation = ["aaa", "bbb", "ccc", "ddd", "eee"] 
     var myCollectionView: UICollectionView! 
     func numberOfSections(in collectionView: UICollectionView) -> Int 
      { 
       return 1 
      } 
      func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int 
      { 
       return arrayLocation.count 
      } 

kolekcja delegat

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MyCollectionViewCell 
       cell.backgroundColor = UIColor.white 
       cell.titleLabel?.text = arrayLocation[indexPath.row] 
       cell.titleLabel.font = UIFont.systemFont(ofSize: 24) 
       return cell 
      } 
      // check cell and do somthing 
      func collectionView(_ collectionView: UICollectionView,didSelectItemAt indexPath: IndexPath) 
      { selectedCell = myCollectionView.cellForItem(at: indexPath)! selectedCell.contentView.backgroundColor = UIColor.red 
       collectionView.allowsSelection = true 
       collectionView.allowsMultipleSelection = true 
     } 

I próbuje użyć tej func ale to nie działa

  func collectionView(_ collectionView: UICollectionView,didDeselectItemAt indexPath: IndexPath) { 
      myCollectionView.deselectItem(at: indexPath, animated: false) } 

override func viewDidLoad() { 
     //get view size 
     let fullsize = UIScreen.main.bounds.size 
     //get collectionViewCell layout 
     let layout = UICollectionViewFlowLayout() 
     //cell size  
     layout.itemSize = CGSize(width: 120, height: 30) 
     //mycollectionView size 
      myCollectionView = UICollectionView(frame: CGRect(x: 108, y: 70, width: fullsize.width - 70, height: fullsize.height - 180), collectionViewLayout: layout) 
     myCollectionView.delegate = self 
     myCollectionView.dataSource = self 
     myCollectionView.backgroundColor = UIColor.white 
     myCollectionView.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: "Cell") 
      layout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 50); 
      layout.minimumLineSpacing = 10 
      layout.minimumInteritemSpacing = 0.5 
      myCollectionView.backgroundColor = UIColor(patternImage: myPag) 
      self.view.addSubview(myCollectionView) 

    } 
      } 

kod MyCollectionViewCell

class MyCollectionViewCell: UICollectionViewCell { 
     var titleLabel:UILabel! 
     override init(frame: CGRect) { 
      super.init(frame: frame) 
      // create UILabel 
      let w = Double(UIScreen.main.bounds.size.width) 
      titleLabel = UILabel(frame:CGRect(x: 0, y: 0, width: w/3 - 10.0, height: 30)) 
      titleLabel.textAlignment = .center 
      titleLabel.textColor = UIColor.black 
      self.addSubview(titleLabel) 
    } 
required init?(coder aDecoder: NSCoder) 
     { 
      fatalError("init(coder:) has not been implemented") 
     } 
} 

Chciałbym dostać Odznacz komórek i co mam zrobić?

Czy ktoś może mi pomóc Plz dzięki mate !!

jak zrobić przycisk może wybrać całą komórkę?

Odpowiedz

9

trzeba ustawić właściwość allowsSelection i allowsMultipleSelection również w viewDidLoad zamiast didSelectItemAt indexPath, Również ponowne komórkę więc wybór komórki jest zmiana podczas przewijania CollectionView zapobiegania tego problemu utworzyć jedną instancję typu [IndexPath] i uzyskaj dostęp do tej metody collectionView w ten sposób.

var selectedCell = [IndexPath]() 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MyCollectionViewCell 
    cell.titleLabel?.text = arrayLocation[indexPath.row] 
    cell.titleLabel.font = UIFont.systemFont(ofSize: 24) 
    if selectedCell.contains(indexPath) { 
     cell.contentView.backgroundColor = .red 
    } 
    else { 
     cell.contentView.backgroundColor = .white 
    }   
    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {   
    let cell = collectionView.cellForItem(at: indexPath)! 
    selectedCell.append(indexPath) 
    cell.contentView.backgroundColor = .red 
} 

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath)! 
    if selectedCell.contains(indexPath) { 
     selectedCell.remove(at: selectedCell.index(of: indexPath)!) 
     cell.contentView.backgroundColor = .white 
    } 
} 
+0

tak działa !!! dzięki stary!!! – Jeff

+0

Przykro mi, mam jeszcze jedno pytanie. jak zrobić przycisk może wybrać całą komórkę? – Jeff

+0

@Jeff Daj mi trochę czasu, aby to uruchomić –

5

Swift 3.0 Rozwiązanie

extension UICollectionView { 
    func deselectAllItems(animated: Bool = false) { 
     for indexPath in self.indexPathsForSelectedItems ?? [] { 
      self.deselectItem(at: indexPath, animated: animated) 
     } 
    } 
} 

Jak korzystać?

myCollectionView.deselectAllItems(false) 
Powiązane problemy