Как скрыть uibutton, если его заголовок пуст или не назначен? - PullRequest
0 голосов
/ 30 января 2019

Код и вопрос представляют проект Xcode в Swift.У меня есть группа кнопок, которые отображают параметры, в соответствии с которыми текст представлен на этикетке.

Текст метки получен из ключей словаря, а текст кнопки - из значений этого же словаря.Тип словаря [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 голосов
/ 30 января 2019

Лично я бы добавил кнопки динамически, по одной для каждого выбора в опросе.Вы можете легко сделать это, используя любой из 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.

Вы должны пройтись по всем кнопкам и , если есть выбор, установить заголовок, в противном случае скрытьbutton

Вот рабочий пример на игровой площадке:

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

OUPUT

Optional("yes")
false
Optional("no")
false
nil
true
nil
true
nil
true
0 голосов
/ 30 января 2019

Если 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, то вернет "", что пусто.

0 голосов
/ 30 января 2019

Вы можете попробовать это: SWIFT 4

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...