Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为自定义UIControl添加触摸事件并确定swift 5中的触摸项目_Ios_Swift_Uiview_Uicontrol - Fatal编程技术网

Ios 如何为自定义UIControl添加触摸事件并确定swift 5中的触摸项目

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如下所示: () 我希望能够

我已经创建了一个自定义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?" }
        }
    }