Атрибуты UIButton не отображаются, если не выбран вариант по умолчанию - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь создать переключатели с некоторыми атрибутами (закругленные углы, тени и т. Д. c.).

Без установки значения по умолчанию radioController.defaultButton = button1 атрибуты кнопки не отображаются, пока я не выберу один из кнопки.

Если я установлю кнопку по умолчанию, все будет работать нормально.

Почему это ???

import UIKit

class ViewController: UIViewController {

    
    @IBOutlet var button1: UIButton!
    @IBOutlet var button2: UIButton!
    @IBOutlet var button3: UIButton!
    
    let radioController: RadioButtonController = RadioButtonController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        radioController.buttonsArray = [button1, button2, button3]

        // ****************************
        radioController.defaultButton = button1
        
    }
    
    @IBAction func button1Action(_sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: _sender)
    }
    
    @IBAction func button2Action(_sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: _sender)
    }
    
    @IBAction func button3Action(_sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: _sender)
    }
                
}



class RadioButtonController: NSObject {
    
    var buttonsArray: [UIButton]!
    {
        didSet {
            for b in buttonsArray {
                
                // rounded corners
                b.layer.cornerRadius = 8.0
                
                // add shadow
                b.layer.shadowColor = UIColor.black.cgColor
                b.layer.shadowOffset = CGSize(width: 0, height: 3)
                b.layer.shadowOpacity = 0.3
                b.layer.shadowRadius = 6.0
                b.layer.masksToBounds = false
                
            }
        }
    }
    
    
    var selectedButton: UIButton?
    
    var defaultButton: UIButton = UIButton() {
        didSet {
            buttonArrayUpdated(buttonSelected: self.defaultButton)
        }
    }
    
    
    
    func buttonArrayUpdated(buttonSelected: UIButton) {
        for b in buttonsArray {
            if b == buttonSelected {
                selectedButton = b
                b.isSelected = true
                // default colors for state
                b.backgroundColor = .black                    
            }
            else {
                b.isSelected = false
                // default colors for state
                b.backgroundColor = .white                    
            }
        }
    }
                
}

Xcode 10, Swift 4

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