将UIButton添加到数组中
我对Swift中的编码比较新,我正在更新当前在应用商店中的应用程序。我目前正在创建一个数组,用于在xib文件中创建的tableView的单元格中的内容。这里是什么样子:将UIButton添加到数组中
`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),这样我可以创建多个按钮,可以调用不同的号码。
在您的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)
}
单元格应拥有视图(例如按钮),并且应该使用您的数据来装饰这些视图。因此,如果您从数据中移除UI关注点,例如用按钮标题字符串替换UIButton引用,可以将该数据应用于方法cellForRowAt
中的单元格视图。
如果我正确理解你,我应该将'let callBtn:UIButton?'更改为一个字符串并将let语句移动到'cellForRowAt'?我很抱歉,我没有完全理解这一点。 –
是的,尝试用'let callBtnTitle:String'替换'let callBtn:UIButton'。注意你的UIViewController实现了UITableViewDataSource,这意味着你的视图控制器将实现一个'cellForRowAt'方法,你可以通过向你的数据应用来填充每个单元格。您的单元应该已经在xib中定义了一个按钮。一般的想法是,xib文件包含所有的UIViews,你的表格和单元格都将为你创建。然后,您将数据应用到每个单元格,例如cell.button.setTitle(“StringFromYourData”,用于:.normal)。祝你好运! – Norman
我编辑了你的代码格式,尽我所能。为代码缩进四个空格是正确的降价。然后我尽可能用arrayOfCallData'缩进 - 如果错误请更正。我发现它非常困难(甚至可能语法错误),以便理解“callBtn”键 - 这可能是您的问题。也许你可以通过将'let url'分成两行(也许是三行)代码来找到各种错误,*构建*该键的值。 – dfd
谢谢!我不小心删除了callBtn和iconImg之间的逗号。 –
你的代码没有意义。在初始化器中的'callBtn:'之后你不能说'let'什么。初始值设定项想要_objects_,而不是代码。以'let'开头的短语不是一个按钮。 – matt