0

Итак, у меня есть кнопка, которая выглядит как карандаш в ячейке просмотра коллекции xib.Collection View Cell Button not triggering action

enter image description here

Тогда у меня есть этот код.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "groupsCollectionViewCellIdentifier", for: indexPath) as! GroupCollectionViewCell 

    //add action to the edit button 
    cell.editButton.tag = indexPath.row 
    cell.editButton.addTarget(self, action: #selector(GroupsCollectionViewController.editGroupAction), for: .touchUpInside) 

    return cell 
} 

//segue to edit group 
func editGroupAction() { 
    performSegue(withIdentifier: "editGroupSegue", sender: self) 
} 

Но всякий раз, когда я нажимаю кнопку редактирования. Ничего не происходит. Интересно, чего не хватает.

ответ

0

Вы назначьте класс ячейки и связать кнопку с контроллером, а также присвоить идентификатор в Segue, а также использовать точку останова, чтобы проверить, если функ является вызов или нет

и использовать SEGUE как это

func editGroupAction() { 
    performSegue(withIdentifier: "editGroupSegue", sender: self) 
    let src = self.sourceViewController as UIViewController 
    let dst = self.destinationViewController as UIViewController 
    src.navigationController.pushViewController(dst, animated:false) 
} 
+0

Я уже присвоен класс для ячейки, Segue также имеет идентификатор. –

+0

Вы пытаетесь найти точку прерывания, тогда вызывается функция func или нет. –

+0

Так что в точке останова она даже не вызывала функцию. Нажатие кнопки ничего не делает. –

1

Учитывая вашу проблему, я создал демоверсию с подробностями, которые вы предоставили выше, с некоторыми незначительными изменениями.
Я изменил ваш метод cellForItem. Моя измененная версия следующая.

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


    cell.editButton.tag = indexPath.row 
    cell.editButton.addTarget(self, action: #selector(editGroupAction(sender:)), for: .touchUpInside) 

    return cell 
} 


И метод действия записывается, как показано ниже:

func editGroupAction(sender: UIButton) { 
    print("Button \(sender.tag) Clicked") 
} 


Из кода я модифицированном ниже Детали:
1) Путь декларации UICollectionViewCell объекта.
2) Способ присвоения #Selector Метод для UIButton. И на последнем
3) В методе действия я напечатаю тег Button.

С приведенными выше изменениями я получаю правильный результат. Я получил выбранное значение индекса как тег кнопки, как указано в коде в консоли. Результат, который я получаю, выглядит следующим образом.

Button 2 Clicked 
Button 3 Clicked 
Button 4 Clicked 

Я надеюсь, что это сработает для вашего требования.

0

Если вы используете IOS 10.Following работает код

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 


      let cell = collectionView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! YourCellClass 
cell.btnJoin.tag = (indexPath as NSIndexPath).row  
cell.btnJoin.addTarget(self, action: #selector(YourViewControllerClassName.doSomething(_:)), for: UIControlEvents.touchUpInside) 
    } 

Действие

func doSomething(_ sender: UIButton) { 
      print("sender index",sender.tag) 
    }