Ios 如何为自定义UIControl添加触摸事件并确定swift 5中的触摸项目
我已经创建了一个自定义UIControl。UIControl包含多个项目,如图形和标签 我希望能够在ViewController中捕捉标签上的轻触。 请注意,我在UIControl中添加了组件,并且我没有使用NIB/XIB文件) 我对swift/iOS开发相当陌生。我在XCode 10.3和swift 5中工作。我做了一些谷歌搜索,但对我帮助不大。我还找到了这个引用(),但我也无法让它工作 我添加了一个最小的代码示例(基于一个新项目) Main.storyboard如下所示: ()Ios 如何为自定义UIControl添加触摸事件并确定swift 5中的触摸项目,ios,swift,uiview,uicontrol,Ios,Swift,Uiview,Uicontrol,我已经创建了一个自定义UIControl。UIControl包含多个项目,如图形和标签 我希望能够在ViewController中捕捉标签上的轻触。 请注意,我在UIControl中添加了组件,并且我没有使用NIB/XIB文件) 我对swift/iOS开发相当陌生。我在XCode 10.3和swift 5中工作。我做了一些谷歌搜索,但对我帮助不大。我还找到了这个引用(),但我也无法让它工作 我添加了一个最小的代码示例(基于一个新项目) Main.storyboard如下所示: () 我希望能够
我希望能够在ViewController.swift中实现
changelab()
函数。或者在功能上实现类似的功能,以便它“捕获”UILabel上的点击,并知道点击了哪个UILabel。首先,默认情况下禁用与UILabel的所有交互。要更改它,请将isUserInteractionEnabled设置为true
import UIKit
@IBDesignable
class SomeUI: UIControl {
private var componentsAdded = false
let labelOne = UILabel()
private let labelTwo = UILabel()
required init?(coder: NSCoder) {
super.init(coder: coder)
labelOne.isUserInteractionEnabled = true
}
override func draw(_ rect: CGRect) {
if !componentsAdded {
componentsAdded = true
self.addSubview(labelOne)
labelOne.text = "one"
labelOne.sizeToFit()
self.addSubview(labelTwo)
labelTwo.text = "two"
labelTwo.sizeToFit()
}
labelOne.center = CGPoint(x: 10, y: 10)
labelTwo.center = CGPoint(x: 10, y: 40)
}
}
\\ File: ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var someLabel: UILabel!
@IBOutlet weak var sui: SomeUI!
@IBAction func changeLabel(_ gestureRecognizer: UITapGestureRecognizer) {
let view = gestureRecognizer.view
let loc = gestureRecognizer.location(in: view)
let subview = sui.hitTest(loc, with: nil)
switch subview {
case sui.labelOne: print("1") someLabel.text = "label one tapped"
case sui.labelTwo: print("2") someLabel.text = "label two tapped"
default: print("0") someLabel.text = "TAPPIO?" }
}
}
在情节提要中,添加一个点击手势识别器,并将其“发送动作”设置为“changeLabel”,“引用插座集合”设置为自定义SomeUI IBOutlet,此处由“sui”属性引用
@伊布:有人
在第二种情况下,我犯了一个错误。它应该是:
//case-labelTwo:someLabel.text=“two”
\\ File: ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var someLabel: UILabel!
func changeLabel() {
// switch sender {
// case labelOne: someLabel.text = "one"
// case labelOne: someLabel.text = "two"
// default: println("other")
// }
}
}
import UIKit
@IBDesignable
class SomeUI: UIControl {
private var componentsAdded = false
let labelOne = UILabel()
private let labelTwo = UILabel()
required init?(coder: NSCoder) {
super.init(coder: coder)
labelOne.isUserInteractionEnabled = true
}
override func draw(_ rect: CGRect) {
if !componentsAdded {
componentsAdded = true
self.addSubview(labelOne)
labelOne.text = "one"
labelOne.sizeToFit()
self.addSubview(labelTwo)
labelTwo.text = "two"
labelTwo.sizeToFit()
}
labelOne.center = CGPoint(x: 10, y: 10)
labelTwo.center = CGPoint(x: 10, y: 40)
}
}
\\ File: ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var someLabel: UILabel!
@IBOutlet weak var sui: SomeUI!
@IBAction func changeLabel(_ gestureRecognizer: UITapGestureRecognizer) {
let view = gestureRecognizer.view
let loc = gestureRecognizer.location(in: view)
let subview = sui.hitTest(loc, with: nil)
switch subview {
case sui.labelOne: print("1") someLabel.text = "label one tapped"
case sui.labelTwo: print("2") someLabel.text = "label two tapped"
default: print("0") someLabel.text = "TAPPIO?" }
}
}