UIView SubView UIButton не отвечает на прикосновения - PullRequest
0 голосов
/ 25 октября 2018

У меня есть UIButton, расположенный внутри подпредставления UIView.Вид выглядит нормально, но кнопка не реагирует на прикосновения.Подвиды - это два отдельных ViewController, встроенных в представления контейнера.

На раскадровке все представления, контроллеры и кнопки имеют взаимодействие с пользователем.Я также включил взаимодействие с пользователем для подпредставлений программно.

Вот код:

@IBOutlet var showtimeView: UIView!
@IBOutlet var reviewView: UIView!
var viewTwo: UIView!
var viewThree: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    viewTwo = ShowtimesView().view
    showtimeView.addSubview(viewTwo)
    viewThree = ReviewsView().view
    reviewView.addSubview(viewThree)
    showtimeView.isUserInteractionEnabled = true
    reviewView.isUserInteractionEnabled = true
    viewTwo.isUserInteractionEnabled = true
    viewThree.isUserInteractionEnabled = true


}

@IBAction func segmentChange(_ sender: Any) {

    switch(segment.selectedSegmentIndex) {

    case 0:

        detailsView.isHidden = false
        showtimeView.isHidden = true
        reviewView.isHidden = true

        break

    case 1:

        detailsView.isHidden = true
        showtimeView.isHidden = false
        reviewView.isHidden = true

        break

    case 2:

        detailsView.isHidden = true
        showtimeView.isHidden = true
        reviewView.isHidden = false

        break

    default:
        break

    }

}

Что еще может препятствовать тому, чтобы UIB-кнопка, расположенная внутри подпредставления, реагировала на прикосновение?

РЕДАКТИРОВАТЬ: я изменил цвет контейнера, чтобы проверить, покрывал ли он viewcontroller.Контейнер не показывался перед контроллером представления subview.Подвиды до сих пор не реагируют на прикосновения.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Решение было удалить код в viewDidLoad.Поскольку представления уже встроены в представления контейнера через сегменты раскадровки, их не нужно создавать как подпредставления.

0 голосов
/ 25 октября 2018

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

Чтобы компенсировать это, нужно иметь вид контейнера (который покрывает вашу кнопку) и вид внутри него, оба вытекают из следующего вида:

class PassthroughView: UIView
{
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
    {
        let view = super.hitTest(point, with: event)
        return view == self ? nil : view
    }
}

Выможно изменить UIView на PassthroughView для этих двух представлений прямо в раскадровке и просто выбросить где-то вышеупомянутый класс (я предпочитаю, чтобы он был в отдельном файле).

...