UIButton, добавленный в подпросмотр, приводит к сбою приложения swift

#ios #swift

#iOS #swift

Вопрос:

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

 var routeButton: UIButton!
override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(routeButton)
        setupRouteBtn()
    }

fileprivate func setupRouteBtn() {

        routeButton = UIButton(type: .custom)
        routeButton.backgroundColor = UIColor.flatBlack()
        routeButton.translatesAutoresizingMaskIntoConstraints = false
        routeButton.widthAnchor.constraint(equalToConstant: 40).isActive = true
        routeButton.heightAnchor.constraint(equalToConstant: 40).isActive = true

        //        routeBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 10).isActive = true
        //        routeBtn.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -10).isActive = true

        routeButton.trailingAnchor.constraint(equalTo: fab.trailingAnchor).isActive = true
        routeButton.leadingAnchor.constraint(equalTo: fab.leadingAnchor).isActive = true
        routeButton.bottomAnchor.constraint(equalTo: fab.topAnchor).isActive = true

        routeButton.setNeedsLayout()
        routeButton.layoutIfNeeded()
        routeButton.layer.cornerRadius = 0.5 * routeButton.bounds.size.width
        routeButton.setImage(UIImage(named:"Group-3.png"), for: .normal)
        routeButton.imageView?.contentMode = .scaleAspectFit
        routeButton.clipsToBounds = true
    }
  

Ответ №1:

Ваша routeButton переменная появляется nil , когда вы добавляете ее в качестве subview. Вам нужно назначить его, прежде чем добавлять в качестве subview

 var routeButton = UIButton(type: .custom)
  

… тогда не назначайте его в setupRouteBtn

routeButton = UIButton(type: .custom)


 var routeButton = UIButton(type: .custom)

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(routeButton)
    setupRouteBtn()
}

fileprivate func setupRouteBtn() {
    routeButton.backgroundColor = .flatBlack()
    ...
}