Показать представление при нажатой кнопке внутри ячейки UICollectionView - PullRequest
0 голосов
/ 30 января 2020

Я работаю над приложением iOS, которое содержит вид коллекции. Внутри этого вида коллекции у меня есть кнопка:

ViewController
-UICollectionView(myColl)
--UICollectionViewCell
---UIButton (myButton)
-UIView (myView)

Я хочу показать myView под myButton когда я нажал на это, я попробую:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TestCell", 
          for: indexPath) as! TestCell
   cell.myButton.addTarget(self, action: #selector(self.showEditView), for: .touchUpInside)
}

и showEditView()

@objc func showEditView(sender:UIButton!)  {
        let position: CGPoint = sender.convert(CGPoint.zero, to: self.myColl)
        myView.center = position
}

Но это не сработало, что я могу сделать, чтобы получить это

Ответы [ 2 ]

1 голос
/ 30 января 2020
 @objc func showEditView(sender:UIButton!)  {
        let position: CGPoint = sender.convert(CGPoint.zero, to: self.collectionview)
        let indexPath = self.collectionview.indexPathForItem(at: position)
        if indexPath != nil {
         myView.center = position
        //if your view is hidden
         myView.isHidden = false
        }
    }
0 голосов
/ 30 января 2020

На самом деле вы можете использовать протокол в вашем UICollectionViewCell для него. Это полезнее, чем использовать forge.

protocol YourProtocolDelegate {
   func showEditView()
}

class YourCVCell: UICollectionViewCell {
  var delegate: YourProtocolDelegate!
  var button = UIButton()
     override init(frame: CGRect) {
       button.addTapGestureRecognizer {
         self.delegate.showEditView()
       }
     }
}

Конечно, вы должны получить наследование от вашего протокола к вашему классу ViewController

class YourViewController: UIViewController, YourProtocolDelegate {
}

После этого вы можете ссылаться на протокол вашей ячейки в вашем viewcontroller.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TestCell", 
      for: indexPath) as! TestCell
   cell.delegate = self
}
...