Динамически UIButton действие внутри контейнера на scrollview не работает - PullRequest
0 голосов
/ 20 декабря 2018

У меня возникли некоторые проблемы с действием UIButtons внутри пользовательской иерархии UIViews, эти представления находятся внутри контейнера в представлении прокрутки. В зависимости от моих потребностей, я создаю или не создаю кнопки. Если я пытаюсь создать ту же кнопку,но в self.view это работает отлично.

иерархия такова:

    - UIScrollView
      - UIView (scroll content) //all above are dynamically created
        - UIView (dynamically)
          - UIButton (dynamically)
        - UIView (dynamically)
           - UIButton (dynamically)

я пытаюсь создать вид таким образом:

    class ScrollViewController: UIViewController {
       @IBOutlet weak var scrollContent: UIView!

       func createViews() {
         let containerButton = UIView()
         self.scrollContent.addSubview(containerButton)
         containerButton.autoPinEdge(toSuperviewEdge: .top, withInset: 16)
         containerButton.autoPinEdge(toSuperviewEdge: .left, withInset: 16)
         containerButton.autoPinEdge(toSuperviewEdge: .right, withInset: 16)
         containerButton.autoSetDimension(.height, toSize: 200)

         let button = UIButton()
         containerButton.addSubview(button)
         button.autoPinEdge(toSuperviewEdge: .top, withInset: 8)
         button.autoPinEdge(toSuperviewEdge: .left, withInset: 8)
         button.autoPinEdge(toSuperviewEdge: .right, withInset: 8)

         button.addTargetClosure { _ in
            print("button tapped")
         }
       } 
    }

все видыдобавлены отлично, но действие кнопок не работает.

я использую PureLayout для ограничений ..

если я добавлю

    button.centerYAnchor.constraint(equalTo: containerButton.centerYAnchor).isActive = true

, он будет работать, но беспорядокс моим макетом ..

я использую этот формат для добавления целей на кнопках

https://medium.com/@jackywangdeveloper/swift-the-right-way-to-add-target-in-uibutton-in-using-closures-877557ed9455

Я не знаю, пропустил ли я что-то или сделал что-то не так при создании представлений,Что мне нужно сделать, чтобы действия кнопок работали внутри контейнера в содержимом прокрутки?

Спасибо!

1 Ответ

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

Попробуйте создать вид, установив userInteractionEnabled для вида true и кнопку.Затем добавьте кнопку в представление, после этого добавьте представление в представление контейнера scrollView:

func createViews() {
     //creating the container
     let containerButton = UIView()
     containerButton.isUserInteractionEnabled = true

     //creating the button
     let button = UIButton()
     self.containerButton.addSubview(button)

     // add view to scrollContent now.
     self.scrollContent.addSubview(containerButton)
   } 
...