Расширение UIButton addSubview не работает

#swift #extension-methods #addsubview

#swift #расширение-методы #addsubview

Вопрос:

Пытаюсь создать UIButton, который при длительном нажатии открывает четыре подвида (кнопки UIButtons — север, восток, юг и запад), к которым пользователь может затем перемещать палец и поднимать для 4 отдельных действий.

 extension UIButton {
func EnablePopOuts (North:Bool = true, nTitle:String, nColor:UIColor = .black, nAction: Selector) {
    if North {
        let northButton = UIButton(frame: self.frame)
        northButton.translatesAutoresizingMaskIntoConstraints = false
        let nA = NSLayoutConstraint(item: northButton, attribute: .height
                                    , relatedBy: .equal, toItem: self, attribute: .height, multiplier: 1, constant: 0)
        let nB = NSLayoutConstraint(item: northButton, attribute: .width
                                    , relatedBy: .equal, toItem: self, attribute: .width, multiplier: 1, constant: 0)
        let nC = NSLayoutConstraint(item: northButton, attribute: .bottom
                                    , relatedBy: .equal, toItem: self, attribute: . top, multiplier: 1, constant: 0)
        let nD = NSLayoutConstraint(item: northButton, attribute: .leading
                                    , relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1, constant: 0)
        self.addSubview(northButton)
        self.didAddSubview(northButton)
        self.addConstraints([nA,nB,nC,nD])
        self.bringSubviewToFront(northButton)
        northButton.setTitle(nTitle, for: .normal)
        northButton.backgroundColor = nColor
        northButton.addTarget(Main.self, action: nAction, for: .touchUpInside)
        self.layoutIfNeeded()
        self.layoutSubviews()
    }
}
}
 

EnablePopOuts запускается, но северная кнопка не отображается.

Комментарии:

1. Вы должны отладить иерархию представлений в xcode, чтобы выяснить, скрывается ли и где северная кнопка.

2. @AndreasOetjen я сделал и не нашел, где его найти

3. функции в Swift должны начинаться со строчных букв в соответствии с правилами регистра. . Что addConstraints делать?

4. Спасибо за ссылку на соглашения о прецедентах. Я самоучка. addContraints применяет ограничения к целевому представлению … в противном случае вы создали только неактивные ограничения.