Я работаю над учебным пособием «Начать разработку iOS», предоставленным Apple, и имеет проблемы в разделе Implement a Custom Control. Я пробовал все, чтобы заставить кнопку печатать что-то на консоль, но не может заставить ее работать. Я нахожусь в разделе в уроке «Добавить кнопки в представление» примерно на пятую часть вниз по странице.Учебник Apple iOS: проблемы с получением UIButton addTarget для работы
Все остальное отлично работает.
Я создал файл RatingControl.swift следующим образом:
import UIKit
class RatingControl: UIView {
// MARK: Initialisation
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Create a square button
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
// Set the background colour of the button
button.backgroundColor = UIColor.darkGray
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)
// Add the button to the view
addSubview(button)
}
// MARK: Button Action
func ratingButtonTapped(_: UIButton) {
print("Button pressed")
}
}
Несколько вещей есть немного отличается от учебника, но это потому, что Xcode говорит все изменилось. В моем файле Main.storyboard я добавил View, используя класс RatingControl. Кнопка отображается, но ничего не происходит, когда я нажимаю на нее.
Любая помощь будет оценена по достоинству. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Дайте вид в раскадровке, которая использует класс RatingControl цветом фона, чтобы вы могли видеть, полностью ли кнопка находится внутри представления. Он должен быть, или он не будет реагировать при нажатии. Кроме того, по той же причине убедитесь, что вы проверили User Interaction Enabled для управления рейтингами. - Также вы уверены, что хотите использовать '.touchDown'? Обычная вещь - .touchUpInside'. – matt
Спасибо. Я попытался сделать это, добавив «self.backgroundColor = UIColor.cyan» сразу после «super.init (coder: aDecoder)», но он не изменил цвет фона в представлении. Я также попытался изменить цвет фона представления в инспекторе атрибутов раскадровки для представления. Ничто не изменило цвет фона. Что мне не хватает? Раньше я заметил «User Interaction Enabled», и он проверяется. Я использовал только .touchDown, потому что в учебнике сказано, что он использует это. Я удивился. Изменил его .touchUpInside, но он не запустил кнопку. – SuperDuperApps
Я переместил вид из стека, в котором он находился, чуть ниже, и все работает. Цвет фона, установленный в раскадровке, работает, и кнопка делает то, что должна. Как только я верну его обратно в стек, он перестает работать. В представлении стека включено взаимодействие с пользователем, а управление над ним в стеке отлично работает. Не понимаю. – SuperDuperApps