检测UIButton特定部分的点击

时间:2019-01-02 03:48:06

标签: ios swift instagram

我正在开发一个instagram克隆,并试图与用户在Home Feed屏幕上使用照片标题功能进行交互。 example

我希望如果用户点击username,控制器将按ProfileViewController,或者如果用户点击caption,控制器将按CommentsViewController。 感谢您的任何建议!

3 个答案:

答案 0 :(得分:0)

使用 label 标签来查找哪个 label

titleLabel.tag = 1
captionLabel.tag = 2

然后使用touchesBegan

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    guard let touch = touches.first else { return }
    // to find cell index. use super view of label

    if let label = touch.view as! UILabel {

     if label.tag == 1 {
        // Move to profile screen
     } else if label.tag == 2 {
       // Move to comments screen
     }
    }
   }

答案 1 :(得分:0)

您可以通过几种方法执行此操作。

您可以附加一个手势,如果您点击框架的特定部分,则可以做一件事。

func tapMethod(gesture:UITapGestureRecognizer) {
    //on label
    let touch = tap.locationInView(button)
    If(label.frame.contains(touch)) {
        //....
    }
    //not on label
    Else {
        /....
    }
}

或者您可以添加2个点击手势,在标签上添加一个手势,在按钮上添加一个手势,然后您可以覆盖

func hitTest(_ point: CGPoint, 
    with event: UIEvent?) -> UIView?

这将使您可以在必要时触摸按钮的子视图,并在必要时单击按钮的操作。这是一个很好的例子。 https://medium.com/@nguyenminhphuc/how-to-pass-ui-events-through-views-in-ios-c1be9ab1626b。它减少了代码的耦合,并允许不同的部分组合在一起。这是最困难的路线,但我认为,这样做最大的好处就是允许最简单的移动和代码流

答案 2 :(得分:0)

您可以使用cellforRow之类的cell.button1.tag = 1 ...方法为每个按钮分配标签,并将 commonEvent 附加到您的 buttons 并检测哪个按钮由sender.tag == 1 { }轻击,依此类推。.