Swift 4: Когда пользователь нажимает на UiButton, как мне получить строку, выбранную в UICollectionView? - PullRequest
0 голосов
/ 09 мая 2018

Вопрос: Я пытаюсь узнать, какой город кто-то выбрал, когда они нажимали на кнопку UIB. Когда пользователь нажимает на UIButton, я хочу знать, «имя» которого townName выбрал пользователь. Как я могу это сделать? Мне удалось успешно передать indexPath.row, но я не уверен, как передать название города, выбранного пользователем. Это мой код ниже. Буду рад любой помощи в этом!

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TownCell
    let name = townName[indexPath.row].name
    let regionId = townName[indexPath.row].region_code

    cell.townLabel.text = "\(name), \(regionId)"

    cell.button.tag = indexPath.row
    print(townName[indexPath.row].name)
    print(townName[indexPath.row].region_code)
    return cell
}


    lazy var button: UIButton = {
        let button = UIButton(type: .system)
        button.backgroundColor = greenCTAColor
        button.layer.cornerRadius = 15
        button.setTitle("select", for: .normal)
        button.setTitle("selected", for: .selected)
        button.setTitleColor(.white, for: .normal)
        button.setTitleColor(.white, for: .selected)
        button.tintColor = .clear
        button.titleLabel?.font = UIFont(name: "ProximaNova-Semibold", size: 16)
        button.addTarget(self, action: #selector(selectedAction), for: .touchUpInside)
        return button
    }()

    @objc func selectedAction(sender: AnyObject) {
        let currentCellNumber = sender.tag
        if let button = sender as? UIButton {
            if button.isSelected {
                button.isSelected = false
                button.backgroundColor = greenCTAColor
                print("User unselected cell number: \(currentCellNumber!)")
            } else {
                button.isSelected = true
                button.backgroundColor = blueCTAColor
                print("User selected cell number: \(currentCellNumber!)")
            }
        }
    }

1 Ответ

0 голосов
/ 09 мая 2018

Просто получите город из массива townName на основе тега кнопки, установленного в представлении коллекции, и вызывается ли ваш метод действия? если его вызов ниже будет работать

@objc func selectedAction(sender: UIButton) {
        let currentCellNumber = sender.tag
        if button.isSelected {
            button.isSelected = false
            button.backgroundColor = greenCTAColor
            print("User unselected cell number: \(currentCellNumber!)")
        } else {
            button.isSelected = true
            button.backgroundColor = blueCTAColor
            print("User selected cell number: \(currentCellNumber!)")
        }

        let town = townName[currentCellNumber]
        print(town.name)
    }

В cellForItemAt добавить действие к кнопке для этой ячейки

cell.button.addTarget(self, action: #selector(selectedAction), for: .touchUpInside)

Я всегда создаю кнопку и действие в классе collectionViewCell, а затем использую делегат patten для передачи данных. но так как вы создали действие в том же контроллере, приведенном выше, оно будет работать, так как для действия установлено значение self, оно будет вызывать selectedAction.

...