将UIButton添加到数组中

时间:2017-08-20 21:20:23

标签: ios arrays swift uibutton xib

我对Swift编码相对较新,而且我正在更新当前在应用商店中的应用。我目前正在为单元格中的内容创建一个数组,用于我在xib文件中创建的tableView。这是它的样子:

`struct callData {
    let cell : Int?
    let hotlineName : String?
    let phoneNumber : String?
    let callBtn : UIButton?
    let iconImg : UIImage?

    init(cell:Int,hotlineName:String,phoneNumber:String, callBtn:UIButton, iconImg:UIImage) {
        self.cell = cell
        self.hotlineName = hotlineName
        self.phoneNumber = phoneNumber
        self.callBtn = callBtn
        self.iconImg = iconImg

    }
}

class _ViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    var arrayOfCallData = [callData(
            cell: 0,
            hotlineName:"",
            phoneNumber:"",
            callBtn:"",
            iconImg: #imageLiteral(resourceName: "smartphone")
        )]

`

我不确定如何在不提供大量错误的情况下将按钮(callBtn)插入数组(arrayOfCallData)。它的目的是从应用程序中的字符串中调用数字,但我不确定如何实现按钮调用的操作。 以下是从应用程序内部调用的代码示例:

let url = NSURL(string: "tel://8004424673")! UIApplication.shared.open(url as URL)

我希望能够将其合并到数组(callBtn)中,这样我就可以创建多个可以调用不同数字的按钮。

2 个答案:

答案 0 :(得分:0)

单元格应该拥有视图(例如按钮),您的数据应该用于装饰这些视图。因此,如果您从数据中移除UI问题,例如使用按钮标题字符串替换UIButton引用,您可以将该数据应用于cellForRowAt方法中的单元格视图。

答案 1 :(得分:0)

在callData中,将您的电话号码保存为callBtnAction,然后您可以使用选择器方法将其取回。

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cellIdendifier: String = "CallDataCell"

    let cellData = arrayOfCallData[indexPath.row]

    let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdendifier, for: indexPath)
    let button = UIButton.init()
    button.frame = CGRect.zero //Set your frame here
    button.setTitle(cellData.callBtnText, for: UIControlState.normal)
    button.tag = indexPath.row
    button.addTarget(self, action: Selector(("buttonClicked:")), for: UIControlEvents.touchUpInside)

    cell.addSubview(button)
    return cell

}

func buttonClicked(sender:UIButton) {
    let selectedRow = sender.tag
    let callData = arrayOfCallData[selectedRow]
    let action = callData.callBtnAction
    print(action)

}