2016-07-07 3 views
1

Я отобразил ячейки (от 0 до 9 и ОК, кнопка «Отмена») с помощью UICollectionView.Как показать/скрыть ячейку в UICollectionView с помощью Swift?

Ниже то, что я хочу:

  1. ОК и Отмена кнопки будут скрыты в первом.
  2. Когда пользователь выбирает хотя бы одно число, тогда кнопка «Отмена» становится видимой.
  3. Когда пользователь выбирает общее число из четырех, тогда кнопка Ok также становится видимой.

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

Сохранить ссылки на Cancel и OK кнопки клеток в методе cellForItemAtIndexPath. Вы можете сначала установить их «contentView». Затем в файле didSelectItemAtIndexPath в зависимости от количества выбранных элементов вы можете использовать ссылки сохраненных ячеек, чтобы скрыть/отобразить кнопку contentView в кнопке OK/Cancel. – 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 

} 
Смежные вопросы