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