代码和问题代表Swift中的Xcode项目。我有一组按钮,这些按钮根据标签上显示的文本显示选项。
标签文本是从字典的键派生的,而按钮文本是从同一字典的值派生的。字典类型为[String: [String]
。键和值都放置在数组中。我目前显示正确的数据,但是某些值的长度与其他值不同。
例如,一个键具有3个值,而另一个键则具有5个值。如果没有要发送的文本,我想隐藏按钮。因此,如果一个键出现在标签中并且具有3个值,我只想显示3个按钮,依此类推。实现此功能的最佳方法是什么?这是我未实现的代码,我想完成:
func startSurvey() {
if surveyQuestions.isEmpty {
surveyQuestions = Array(SampleSurvey().surveyquestions.keys)
print(surveyQuestions)
}
let rand = Int(arc4random_uniform(UInt32(surveyQuestions.count)))
questionTitle.text = surveyQuestions[rand]
var choices = SampleSurvey().surveyquestions[surveyQuestions[rand]]!
print(choices)
print(choices.count)
surveyQuestions.remove(at: rand)
var button = UIButton()
var x = 0
// var choicePool = choices.count
if choices.count == 2 {
for index in 1...2 {
button = view.viewWithTag(index) as! UIButton
button.setTitle(choices[x], for: .normal)
x += 1
if button.titleLabel?.text.isEmpty == true {
button.isHidden = true
}
}
}
else if choices.count == 4 {
for index in 1...4 {
button = view.viewWithTag(index) as! UIButton
button.setTitle(choices[x], for: .normal)
x += 1
if button.titleLabel?.text.isEmpty == true {
button.isHidden = true
}
}
}
这是模拟器的屏幕截图,因为您可以看到此特定键只有2个值,所以有3个空白按钮,我想隐藏空白按钮:
更新:以下代码授予了我想要的功能:
var button = UIButton()
var x = 0
let buttonTags = [0,1,2,3,4]
if choices.count == 2 {
for idx in buttonTags {
button = surveyChoices[idx]
if idx < choices.count {
button.setTitle(choices[x], for: .normal)
x += 1
} else {
button.isHidden = true
}
}
}
答案 0 :(得分:0)
您可以尝试以下操作: SWIFT 4
button.isHidden = button.titleLabel?.text == nil || button.titleLabel?.text == ""
答案 1 :(得分:0)
我个人会动态添加按钮,调查中的每个选项都会添加一个。您可以使用UITableView
,UICollectionView
或UIStackView
中的任何一个轻松地做到这一点,只需添加包含按钮(tableView或collectionView)的行/单元格,或仅将按钮添加到垂直堆栈即可视图。
对于您的特定代码,您仅遍历选择的数量,因此,在下面的示例(来自您的代码)中,您仅使用两个按钮,而未触摸其他按钮
if choices.count == 2 {
for index in 1...2 {
button = view.viewWithTag(index) as! UIButton
button.setTitle(choices[x], for: .normal)
x += 1
if button.titleLabel?.text.isEmpty == true {
button.isHidden = true
}
}
}
for index in 1...2
...您对其他3个没有做任何事情。
您应该循环浏览所有按钮,并且如果有一个选择,请设置标题,否则隐藏按钮
这是一个操场上的可行示例:
let question = ["are you expecting a child": ["yes", "no"]]
let choices = question["are you expecting a child"]!
let buttonTags = [0, 1, 2, 3, 4]
let buttons = [
UIButton(),
UIButton(),
UIButton(),
UIButton(),
UIButton()
]
for idx in buttonTags {
let button = buttons[idx]
if idx < choices.count {
button.setTitle(choices[idx], for: .normal)
} else {
button.isHidden = true
}
}
buttons.map {
print($0.titleLabel?.text)
print($0.isHidden)
}
输出
Optional("yes")
false
Optional("no")
false
nil
true
nil
true
nil
true
答案 2 :(得分:0)
如果按钮的text
中的titleLabel
为nil
,那么您的条件将为假。
尝试像这样修改您的代码:
for index in 1...4 {
button = view.viewWithTag(index) as! UIButton
button.setTitle(choices[x], for: .normal)
x += 1
if (button.titleLabel?.text ?? "").isEmpty == true {
button.isHidden = true
}
}
这将检查text
是否为nil
,然后将返回一个""
为空。