Swift3 多按钮动态编码触发事件

Swift3 Multiple buttons dynamic coding to trigger event

我有多个按钮。每个按钮都包含一个语言标签。

我想做的是,当用户点击按钮时,所选语言标签会根据点击的按钮更改其值。

选定的语言出口名为 SelectedLangText。

一个简单的解决方案是为每个按钮创建多个 Action 出口并设置 SelectedLangText 标签的值。但是,如果有 100 个按钮,那将是糟糕的编码。

我不确定如何处理来自 Web 开发的 Swift 3 中的这种情况。

您可以为每个按钮添加标签并为所有按钮设置相同的 IBAction。

首先在您的方法中获取基于按钮的语言。 现在使用循环(使用 for 循环,因为每个按钮都需要适当的索引)并从其标签中获取所有按钮并设置语言标签。

乍一看有点复杂,但会解决你的问题,而且是我眼中的好方案。

for index in 101...103 {
        let myBtn = self.view.viewWithTag(index) as! UIButton
        myBtn.setTitle("localisedtitle string", for: .normal)
}

在解决这样的问题时,我更喜欢使用委托设计模式,因为我发现它比大量的@IBActions 更简洁

1- 创建语言 class 进口基金会

class Language {
    var id: Int
    var name: String
    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }
}

2- 在故事板或笔尖中创建自定义单元格,然后添加适当的出口和操作。然后你为它创建一个委托协议

import UIKit
protocol CustomCellDelegate: class {
    func customCell(newLanguageSelected language: Language)
}
class CustomCell: UITableViewCell {
    var language: Language!
    @IBOutlet weak var languageTextLabel: UILabel!
    weak var delegate: CustomCellDelegate?
    func setupCustomCell(withLanguage language: Language){
        self.language = language
        self.languageTextLabel.text = self.language.name
    }
    @IBAction func buttonPressed(sender: UIButton){
        delegate?.customCell(newLanguageSelected: self.language)
    }
}

3-最后在UITableViewDataSource的cellForRow方法中添加实现,在UITableViewController中添加delegate的实现class

import UIKit
class YourTableViewController: UITableViewController{
    var languages: [Language] = []

    //implement the other methods in the dataSource

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuse", for: indexPath) as! CustomCell
        cell.delegate = self
        cell.setupCustomCell(withLanguage: languages[indexPath.row])
        return cell
    }
}
extension YourTableViewController: CustomCellDelegate{
    func customCell(newLanguageSelected language: Language) {
        //Do what you will with the language
    }
}

祝你好运