#ios #swift #xcode #uikit
#iOS #swift #xcode #uikit
Вопрос:
Новичок в программировании, поэтому простите меня, если это вопрос для начинающих.
У меня есть пользовательский класс button (DropDownPicker), который я инициализирую на основе ограничений UIButton-заполнителя, который я создаю в storyboard. Другими словами, я создаю заполнитель в storyboard, делаю его выходом, а затем инициализирую свою пользовательскую кнопку, чтобы она имела те же ограничения.
В viewDidLoad контроллера представления у меня есть это:
let button = DropDownPicker.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
self.view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.centerXAnchor.constraint(equalTo: placeholder.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: placeholder.centerYAnchor).isActive = true
button.leadingAnchor.constraint(equalTo: placeholder.leadingAnchor).isActive = true
button.trailingAnchor.constraint(equalTo: placeholder.trailingAnchor).isActive = true
button.topAnchor.constraint(equalTo: placeholder.topAnchor).isActive = true
button.bottomAnchor.constraint(equalTo: placeholder.bottomAnchor).isActive = true
И в классе DropDownPicker у меня есть:
override init(frame: CGRect) {
super.init(frame: frame)
layer.cornerRadius = 15
layer.masksToBounds = true
clipsToBounds = true
}
Странно то, что если я создам заполнитель в пустом контроллере представления без каких-либо ограничений, это сработает. Но если я добавлю ограничения, она исчезнет. Есть идеи, почему это может быть?
Спасибо!
Комментарии:
1. Почему вы используете заполнитель? Почему бы не разместить кнопку DropDownPicker непосредственно в раскадровке?
2. Задайте кнопке размер. Значение, установленное
width
иheight
на что-то другое, чем0
.3. @Supporteroftruth К сожалению, я не смог понять, как это сделать. У меня есть кнопка, установленная в моем классе DropDownPicker, но из того, что я могу сказать, ее все еще нужно инициализировать из контроллера представления. Еще раз прошу прощения за суперосновной вопрос.
4. @Don Я пробовал это, но безуспешно.
5. Все в порядке, вы должны делать это так, как упоминал @supporteroftruth. В вашем
init
приведенном выше примере удалите свой установочный код и поместите его в новый метод, который называетсяsetup()
или что-то в этом роде. Вам также нужно будет добавитьrequired init?(coder aDecoder: NSCoder) {}
. Вызовитеsuper
и ваш новыйsetup()
метод также изнутри этогоinit
. Это то,init
что использует раскадровка. Поскольку вы уже настраиваете класс в инспекторе идентификации, все должно быть готово.