如果标题文本为空或未分配,如何隐藏uibutton?

时间:2019-01-30 08:22:42

标签: ios swift if-statement uibutton

代码和问题代表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个空白按钮,我想隐藏空白按钮:

screenshot of simulator

更新:以下代码授予了我想要的功能:

      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
            }
        }
    }

3 个答案:

答案 0 :(得分:0)

您可以尝试以下操作: SWIFT 4

button.isHidden = button.titleLabel?.text == nil || button.titleLabel?.text == ""

答案 1 :(得分:0)

我个人会动态添加按钮,调查中的每个选项都会添加一个。您可以使用UITableViewUICollectionViewUIStackView中的任何一个轻松地做到这一点,只需添加包含按钮(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中的titleLabelnil,那么您的条件将为假。 尝试像这样修改您的代码:

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,然后将返回一个""为空。