动态UIButton动作在scrollview上的容器内不起作用

时间:2018-12-20 17:52:03

标签: swift uiview uiscrollview uibutton

我在UIView的自定义层次结构(此视图)中的UIButton的操作存在一些问题,位于滚动视图的容器内 根据我的需要,是否创建按钮。 如果我尝试创建相同的按钮,但在self.view上,则可以正常工作。

层次结构是这样的:

self.ltbox

尝试通过这种方式创建视图:

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

所有视图均完美添加,但按钮的操作不起作用。

我使用PureLayout进行约束。

如果我添加

    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")
         }
       } 
    }

看起来不错,但是却弄乱了我的布局。

使用此格式在按钮上添加目标

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

我不知道我在创建视图时是否缺少某些内容或做错了什么。我该怎么做才能使按钮动作在滚动视图内容的容器内起作用?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试创建视图,将视图的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)
   }