Невозможно изменить несколько цветов кнопок на пользовательском устройстве swift iOS? - PullRequest
0 голосов
/ 07 мая 2018

В моем проекте я использую 6 кнопок на одном экране. Я хочу изменить цвет кнопки в зависимости от нажатия пользователя и «значения дневного заказа». я получаю «дневной порядок» с сервера. Например, пользовательский дневной порядок равен 1, цвет фона кнопки «день1» должен быть красным, если пользователь нажимает на кнопку «день2», кнопка «день2» должна быть синего цвета, а оставшийся цвет всех кнопок должен быть белым. ,

Пожалуйста, смотрите скриншот ниже.

enter image description here

если пользователь нажал одну кнопку, то эта кнопка должна быть выделена, а оставшиеся кнопки должны быть одного цвета. Я могу изменить цвет кнопки, проверив каждое условие, но хочу написать простым способом.

см. Следующий код, который я пробовал для "dayoredrvalue".

func UpdateButtoncolor()
    {
        let dayOrderStr  =  UserDefaults.standard.string(forKey: "dayOrderStr")
        print("dayOrderStr--",dayOrderStr)

        if (dayOrderStr?.isEqual("1"))!{


            self.day1Btn.backgroundColor = UIColor.red
            self.day2Btn.backgroundColor = UIColor.white
            self.day3Btn.backgroundColor = UIColor.white
            self.day4Btn.backgroundColor = UIColor.white
            self.day5Btn.backgroundColor = UIColor.white
            self.day6Btn.backgroundColor = UIColor.white


        }else if(dayOrderStr?.isEqual("2"))!
        {
            self.day1Btn.backgroundColor = UIColor.white
            self.day2Btn.backgroundColor = UIColor.red
            self.day3Btn.backgroundColor = UIColor.white
            self.day4Btn.backgroundColor = UIColor.white
            self.day5Btn.backgroundColor = UIColor.white
            self.day6Btn.backgroundColor = UIColor.white
        }else if(dayOrderStr?.isEqual("3"))!
        {
            self.day1Btn.backgroundColor = UIColor.white
            self.day2Btn.backgroundColor = UIColor.white
            self.day3Btn.backgroundColor = UIColor.red
            self.day4Btn.backgroundColor = UIColor.white
            self.day5Btn.backgroundColor = UIColor.white
            self.day6Btn.backgroundColor = UIColor.white
        }else if(dayOrderStr?.isEqual("4"))!
        {
            self.day1Btn.backgroundColor = UIColor.white
            self.day2Btn.backgroundColor = UIColor.white
            self.day3Btn.backgroundColor = UIColor.white
            self.day4Btn.backgroundColor = UIColor.red
            self.day5Btn.backgroundColor = UIColor.white
            self.day6Btn.backgroundColor = UIColor.white
        }else if(dayOrderStr?.isEqual("5"))!
        {
            self.day1Btn.backgroundColor = UIColor.white
            self.day2Btn.backgroundColor = UIColor.white
            self.day3Btn.backgroundColor = UIColor.white
            self.day4Btn.backgroundColor = UIColor.white
            self.day5Btn.backgroundColor = UIColor.red
            self.day6Btn.backgroundColor = UIColor.white
        }else
        {
            self.day1Btn.backgroundColor = UIColor.white
            self.day2Btn.backgroundColor = UIColor.white
            self.day3Btn.backgroundColor = UIColor.white
            self.day4Btn.backgroundColor = UIColor.white
            self.day5Btn.backgroundColor = UIColor.white
            self.day6Btn.backgroundColor = UIColor.red
        }


    }

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Упрощенный код, он использует массив кнопок и индекс:

let buttonArray = [day1Btn, day2Btn, day3Btn, day4Btn, day5Btn, day6Btn]
buttonArray.forEach { $0.backgroundColor = .white }
guard let dayOrderStr =  UserDefaults.standard.string(forKey: "dayOrderStr"),
    let dayOrderIndex = Int(dayOrderStr), 1...buttonArray.count ~= dayOrderIndex {
        buttonArray[dayOrderIndex-1].backgroundColor = .red
}

Это может быть еще проще, если вы сохраните значение в UserDefaults как Int

0 голосов
/ 07 мая 2018

Я приложил демо для вас, используя мою логику:

Для этого вам нужно взять групповые розетки вашего UIButton и назначить каждому уникальный тег, а затем логика покоя описана в демонстрационной версии, прилагаемой ниже.

как

 @IBOutlet var btnAllSelected: [UIButton]!

А потом простая логика, подобная этой:

 @IBAction func btnAllClicked(_ sender: UIButton) {

    for button in btnAllSelected {
        if sender.tag == button.tag{
            button.isSelected = true;
            button.backgroundColor = UIColor.green
        }else{
            button.isSelected = false;
            button.backgroundColor = UIColor.red
        }
    }

    if sender.tag == 1{
        print("Button 1 selected")
    }else if sender.tag == 2{
        print("Button 2 selected")
    }else if sender.tag == 3{
         print("Button 3 selected")
    }else if sender.tag == 4{
         print("Button 4 selected")
    }else if sender.tag == 5{
        print("Button 5 selected")
    }else if sender.tag == 6{
        print("Button 6 selected")
    }

}

Ссылка на демоверсию

К вашему сведению: - Пожалуйста, игнорируйте установленные в нем стручки. Я отредактировал еще одну демку и сделал ее для вас.

Надеюсь, это поможет.

0 голосов
/ 07 мая 2018

Вы должны создать New Referencing Outlet Collections для всех ваших UIButtons, как это,

@IBOutlet var arrButtons: [UIButton]!

Реализация только одного события нажатия кнопки для всех ваших кнопок. Пожалуйста, найдите код ниже.

@IBAction func btnClicked(_ sender: UIButton) {
    arrButtons.forEach({$0.backgroundColor = UIColor.red})
    sender.backgroundColor = UIColor.darkGray
}
0 голосов
/ 07 мая 2018

По вашему запросу это довольно просто. Просто следуйте следующему -

Шаг 1: Добавьте объект UIButton в свой viewController. Вот так -

 var selectedButton: UIButton? = nil

Шаг 2: Добавить одинаковое действие кнопки для всех ваших кнопок -

@IBAction func btnActionSelection(_ sender:UIButton){

   if(selectedButton == nil){ // No previous button was selected

    updateButtonSelection(sender)

   }else{ // User have already selected a button

      if(selectedButton != sender){ // Not the same button

            selectedButton?.backgroundColor = .clear
            updateButtonSelection(sender)
         }

   }
}

Шаг 3: Теперь, обновление кнопки выбора

func updateButtonSelection(_ sender: UIButton){

   UserDefaults.standard.set("\(sender.tag)", forKey: "dayOrderStr")
   selectedButton = sender
   selectedButton?.backgroundColor = .green

}

Шаг 4: Проверка выбранного пользователем дня (для этого необходимо добавить тег на кнопках от 1 до 6 соответственно)

 override func viewDidLoad() {
    super.viewDidLoad()

   // Check user's selected day
    if let selectedDay =  UserDefaults.standard.value(forKey: "dayOrderStr") as? String{

         debugPrint("selectedDay: "selectedDay) // Get user's selected day
         if let btn = self.view.viewWithTag(Int(selectedDay)!){

            updateButtonSelection(btn)

        }

    }

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