2016-11-11 37 views
5

TenViewController kodu:Swift Koleksiyon Cell seçimini kaldırmak için nasıl

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 
      } 

toplama temsilci

  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 
     } 

bu fonk kullanmaya çalışıyorum ama

çalışmıyor
  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) 

    } 
      } 

MyCollectionViewCell kodu

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

Hücre bırak öğesine almak ve ne yapmalıyım istersiniz?

Herkes bana yardım edebilir, teşekkürler dostum!

Düğme nasıl yapılır tüm hücreyi seçebilir?

cevap

9

Sen hücrenin Seçiminizi değişikliğidir böylece tip [IndexPath] bir örneğini oluşturmaktır Bu sorunu önlemek için CollectionView kaydırırken Ayrıca hücreyi yeniden, viewDidLoad yerine didSelectItemAt indexPath de mülk allowsSelection ve allowsMultipleSelection ayarlamanız gerekir ve bunun koleksiyonunuzdaki yöntemine bu şekilde erişin.

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

evet çalışıyor! teşekkürler dostum!!! – Jeff

+0

üzgünüm Başka bir sorum var. Bir düğmenin nasıl yapılacağı tüm hücreyi seçebilir? – Jeff

+0

@Jeff Bunu çalıştırmak için biraz zaman ver –

5

Swift 3.0 Çözüm

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

nasıl kullanılır?

myCollectionView.deselectAllItems(false)