【问题标题】:Creating a simple label that switches text when tapped in swift创建一个简单的标签,在快速点击时切换文本
【发布时间】:2018-03-12 10:10:18
【问题描述】:

Swift 4.0 iOS 11.x 就在您认为自己掌握了窍门时,您意识到自己错过了一些关键的东西。想要创建一个标签,当您点击它时会自行改变。创建了这个标签的子类。

import UIKit

class TapText: UILabel {

private var changableValues: String = "NESW"
private var currentPosition:Int = 0

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    print("required ")
    let tap = UITapGestureRecognizer(target: self, action:  Selector(("tapFunction:")))
    self.addGestureRecognizer(tap)
}

required override init(frame: CGRect) {
    super.init(frame: frame)
     print("required override")
    let tap = UITapGestureRecognizer(target: self, action:  Selector(("tapFunction:")))
    self.addGestureRecognizer(tap)
}

func tapFunction(sender:UITapGestureRecognizer) {
    print("tapped")
    self.text = String(Array(changableValues)[currentPosition])
    if currentPosition < changableValues.count {
        currentPosition += 1
    } else {
        currentPosition = 0
    }
}

}

我认为这会起作用。正如 Nilish 刚刚指出的那样,我忘记添加 userInteractive,但是当我这样做时会崩溃。

2018-03-12 11:14:40.283502+0100 Blah[952:382749] -[Blah.TapText tapFunction:]: 无法识别的选择器发送到实例 0x111a57700 2018-03-12 11:14:40.285213+0100 QRCodeReader[952:382749] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[Blah.TapText tapFunction:]: 无法识别的选择器发送到实例 0x111a57700' * 第一次抛出调用栈:(0x184633164 0x18387c528 0x184640628 0x18dfae188 0x184638b10 0x18451dccc 0x18e28aca4 0x18e28f298 0x18dd67a14 0x18dc1eb50 0x18e278b08 0x18e278678 0x18e2777d4 0x18dc1ce5c 0x18dbede7c 0x18e54330c 0x18e545898 0x18e53e7b0 0x1845db77c 0x1845db6fc 0x1845daf84 0x1845d8b5c 0x1844f8c58 0x1863a4f84 0x18dc515c4 0x100887c3c 0x18401856c) libc++abi.dylib: 以 NSException 类型的未捕获异常终止

--- 添加了 _ bar 和 @objc 指令,现在可以使用了...看起来像这样...

required override init(frame: CGRect) {
    super.init(frame: frame)
     print("fcuk12032018 required override")
    let tap = UITapGestureRecognizer(target: self, action:  #selector(tapFunction))
    self.addGestureRecognizer(tap)
}

@objc func tapFunction(_ sender:UITapGestureRecognizer) {
    print("fcuk12032018 tapped")
    self.text = String(Array(changableValues)[currentPosition])
    if currentPosition < changableValues.count - 1 {
        currentPosition += 1
    } else {
        currentPosition = 0
    }
}

感谢尼蒂什!

【问题讨论】:

  • 您似乎没有在任何地方将 userInteraction 设置为 true。
  • 是的,你的权利 Nilish!
  • 关于崩溃问题 - 尝试将函数设置为 func tapFunction(_sender: UITapGestureRecognizer)。并使用#selector 设置选择器。

标签: ios swift uigesturerecognizer uitapgesturerecognizer


【解决方案1】:

在初始化程序中将userInteraction 设置为true。然后UILabel 将响应手势。
关于崩溃问题: 尝试将函数设置为func tapFunction(_sender: UITapGestureRecognizer)。并使用 #selector 设置选择器。

【讨论】:

    【解决方案2】:

    您似乎错过了代码中的 userInteractionEnabled。 您可以像这样将它添加到您的 viewController 中:

    final class MyViewController: UIViewController {
       @IBOutlet private var myLabel: TapText!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            myLabel.userInteractionEnabled = true
    }
    

    或者直接在你的自定义类中:

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        print("required ")
        self.userInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action:  Selector(("tapFunction:")))
        self.addGestureRecognizer(tap)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多