2016-07-07 140 views
1

我已經使用UICollectionView顯示了單元格(0到9和確定,取消按鈕)。如何使用Swift在UICollectionView中顯示/隱藏單元格?

下面是我想要的東西:

  1. 確定和取消按鈕,將首先被隱藏。
  2. 當用戶選擇至少一個號碼時,取消按鈕變得可見。
  3. 當用戶選擇總共四個號碼,然後確定按鈕也變得可見。

Screenshot for problem

下面是我做的代碼:

var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Cancel","0", "OK"] 

... 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CustomCollectionViewCell 

     cell.lblNumber!.text = self.items[indexPath.item] 

     if (self.items[indexPath.item])=="Cancel" { 
      cell.hidden = true; 
     } 

     if (self.items[indexPath.item])=="OK" { 
      cell.hidden = true; 
     } 

     return cell 
    } 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    print("You selected cell #\(indexPath.item) and value : \(self.items[indexPath.item]) count : \(counter)") 
    ... 
    } 

如何才能實現這一目標?這裏

+0

保存在cellForItemAtIndexPath方法將取消和OK鍵細胞引用。您可以將其'contentView'設置爲隱藏。然後在didSelectItemAtIndexPath中根據所選項目的數量,可以使用已保存單元格的引用來隱藏/取消隱藏OK/Cancel按鈕的contentView。 – 7vikram7

+1

另一種方法是保持選擇列表(在'didSelect..'上)並強制更新(通過'reloadData()'),根據列表的數量啓用/禁用取消/ OK。順便說一下,imo啓用/禁用按鈕對用戶來說要比顯示/隱藏更加直觀。 – Alladinian

回答

0

喜是例子回答:

import UIKit 

class ViewController: UIViewController { 

    var objectNumCollectionViewCell : NumCollectionViewCell = NumCollectionViewCell() 

    @IBOutlet weak var lblnumber: UILabel! 
    var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Cancel","0", "OK"] 

    var strnum: String = "" 

    @IBOutlet weak var collectionviewMain: UICollectionView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - CollectionView DataSource Method 

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

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

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{ 
      objectNumCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! NumCollectionViewCell 
      objectNumCollectionViewCell.lblNum.text = items[indexPath.item] as String 

     if indexPath.item == 9 { 
      if lblnumber.text?.characters.count > 0 { 
       objectNumCollectionViewCell.hidden = false 
      } 
      else{ 
       objectNumCollectionViewCell.hidden = true 
      } 
     } 
     else 
     { 
      objectNumCollectionViewCell.hidden = false 
     } 

     if indexPath.item == 11 { 
      if strnum.characters.count > 3 { 
       objectNumCollectionViewCell.hidden = false 
      } 
      else{ 
       objectNumCollectionViewCell.hidden = true 
      } 
     } 

     objectNumCollectionViewCell.layer.borderWidth = 1.0 
     objectNumCollectionViewCell.layer.borderColor = UIColor.darkGrayColor().CGColor 
     objectNumCollectionViewCell.layer.cornerRadius = 10.0 
     objectNumCollectionViewCell.layer.masksToBounds = true 

     return objectNumCollectionViewCell 
    } 

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets{ 
      return UIEdgeInsetsMake(0, 5, 0, 5); 
    } 

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{ 
     return CGSizeMake(self.view.frame.size.width/3-10, 100) 
    } 

    // MARK: - CollectionView Delegate Method 

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){ 

     objectNumCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! NumCollectionViewCell 

     if indexPath.item == 9 { 
      strnum.removeAtIndex(strnum.endIndex.predecessor()) 
     } 
     else if indexPath.item == 11{ 
      let alert:UIAlertView = UIAlertView(title: "Number Demo", message: "You have Pressed Ok", delegate: nil, cancelButtonTitle: "ok") 

      dispatch_async(dispatch_get_main_queue(), { 
       alert.show() 
      }) 
     } 
     else 
     { 
      if strnum.characters.count < 4 { 
       strnum.append(Character(items[indexPath.item] as String)) 
      } 
     } 

     lblnumber.text = strnum 
     collectionviewMain.reloadData() 
    } 
} 

// Custom cell class 
// identifier = "cell" 

import UIKit 

class NumCollectionViewCell: UICollectionViewCell { 

    @IBOutlet weak var lblNum: UILabel! // please declare label in storyboard 

} 
相關問題