我有一系列按钮和一个字典,其中keys
是按钮的名称,而values
是url
这些按钮打算打开。
所有这些都按正确的顺序排序,并显示正确的按钮名称。
我正在努力将正确的url
传递给openLink()
函数。
这是我的代码:
@IBOutlet var links: [UIButton]!
let keysAndValues = ["Twitter" : "https://twitter.com/",
"Facebook" : "https://facebook.com/",
"YouTube" : "https://youtube.com/"]
func setButtonName() {
let sortedDict = keysAndValues.sorted(by: <)
let sortedButtons = links.sorted { $0.frame.origin.y < $1.frame.origin.y }
for (index, button) in sortedButtons.enumerated() {
button.setTitle(sortedDict[index].key, for: UIControlState.normal)
}
}
@IBAction func buttonTapped(_ sender: Any) {
let sortedDict = keysAndValues.sorted(by: <)
let sortedButtons = links.sorted { $0.frame.origin.y < $1.frame.origin.y }
for (index, _) in sortedButtons.enumerated() {
openLink(sortedDict[index].value)
}
}
func openLink(_ link: String) {
if let url = URL(string: "\(link)") {
UIApplication.shared.open(url, options: [:])
}
}
如何将正确的value
传递给openLink(_ link: String)
?目前,链接按随机顺序工作。
PS:每个按钮都与@IBOutlet
和@IBAction
答案 0 :(得分:1)
您的问题是,对于每个按钮,您都会为每个按钮拨打openLink
。显然,您只需要为与点按按钮关联的一个网址openLink
拨打电话。
重写您的buttonTapped
方法,如下所示:
@IBAction func buttonTapped(_ sender: UIButton) {
let title = sender.title(for: .normal)
if let url = keysAndValues[title] {
openLink(url)
}
}
这会获取点按按钮的标题,并将其用作检索相应网址的密钥。
答案 1 :(得分:1)
定义一个实例变量来保存按钮键入的URL字典:
var buttonURLsDict = [UIButton: String]()
然后修改你的setButtonName方法:
func setButtonName() {
let sortedDict = keysAndValues.sorted(by: <)
let sortedButtons = links.sorted {
$0.frame.origin.y < $1.frame.origin.y
}
for (index, button) in sortedButtons.enumerated() {
let title = sortedDict[index].key
button.setTitle(title, for: UIControlState.normal)
buttonURLsDict[button] = sortedDict[index].value
}
}
您的IBAction方法:
@IBAction func buttonTapped(_ sender: UIButton) {
guard let url = buttonURLsDict[sender] else { return }
openLink(url)
}
}