Swift - 在通过自定义UIView类创建的按钮上获取点击位置

时间:2016-08-20 11:54:22

标签: swift

我的主UIViewController和自定义UIView课程中有一个主滚动条视图。此自定义UIView类只需几行代码即可以编程方式创建ButtonLabelButton点击执行的操作工作正常,但我还需要在按钮很长时获取按钮上的确切点击位置​​(CGPoint),然后点按x坐标动作。我尝试了很少从 stackoverflow 获得的解决方案,并且正在为其他对象工作,例如LabelImageview但不适用于按钮。

我的自定义UIView类:

import UIKit
class DrawProj: UIView {

    override func drawRect(rect: CGRect) {
        let button = UIButton(type: .System) 
        button.frame = CGRectMake(24, 15, linewidth - 25, 20)
        button.backgroundColor = UIColor.orangeColor()
        button.addTarget(nil, action: "onButtonTap:", forControlEvents: .TouchUpInside)
        self.addSubview(button)
    }
}

主视图控制器中的代码

let DrawProjectLanes = DrawProj(frame: CGRect(x: startx, y: starty, width: endx , height: 50))
DrawProjectLanes.backgroundColor = UIColor.clearColor()
DrawProjectLanes.userInteractionEnabled = true
MainScroller.addSubview(DrawProjectLanes)

1 个答案:

答案 0 :(得分:0)

您应该覆盖touchesBegan以使其正常工作:

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

}

然后将您的button子视图声明为属性:

class DrawProj: UIView {
    var button: UIButton!

    override func drawRect(rect: CGRect) {
        button = UIButton(type: .System) 
        button.frame = CGRectMake(24, 15, linewidth - 25, 20)
        button.backgroundColor = UIColor.orangeColor()
        button.addTarget(nil, action: "onButtonTap:", forControlEvents: .TouchUpInside)
        self.addSubview(button)
    }
}

touchesBegan中,执行此操作以获取点击相对于按钮框架的x位置:

let posX = touches.first!.locationInView(button).x

然后,您可以随意使用此posX变量。

如何实例化视图控制器:

在故事板中,选择您要呈现的VC。转到身份检查器,为VC设置故事板ID:

enter image description here

然后在代码中,

let sb = UIStoryboard(name: "Main", bundle: nil)
let viewController = sb.instantiateViewControllerWithIdentifier("put the storyboard ID that you set earlier here")
let topViewController = UIApplication.sharedApplication().keyWindow?.rootViewController?.presentationController
topViewController?.presentViewController(viewController, animated: true, completion: nil)