如何通过标签定义标签

时间:2018-04-02 22:15:23

标签: ios swift uilabel uitapgesturerecognizer

我尝试制作一个标签云,我无法确定如何确定按下哪个标签,以及更改颜色。如果我使用像viewq.viewWithTag(1)它的工作,但我怎么能理解我按什么标签?为了改变价值。也许我需要一个制作课程?因为我想要(如果你按一次,设置颜色红色和一些动作,如果再次设置蓝色再做一些动作)

//
//  ViewController.swift
//  weqddwqd
//
//  Created by Jacket on 4/2/18.
//  Copyright © 2018 TryFit. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var viewq: UIView!

    var arrq: [String] = ["Hello", "World", "of", "Tags"]
    var tags: [Int] = Array()

    override func viewDidLoad() {
        super.viewDidLoad()

        createTagsLabel(arrq)
    }
}

extension ViewController {

    func createTagsLabel(_: [String]) {

        var xPos:CGFloat = 15.0
        var ypos: CGFloat = 130.0
        var tag: Int = 0

        for word in arrq {

            let width = word.widthOfString(usingFont: UIFont(name:"verdana", size: 13.0)!)

            let checkWholeWidth = CGFloat(xPos) + CGFloat(width) + CGFloat(13.0) + CGFloat(25.5)
            if checkWholeWidth > UIScreen.main.bounds.size.width - 30.0 {
                xPos = 15.0
                ypos = ypos + 29.0 + 8.0
            }

            let textlable = UILabel(frame: CGRect(x: xPos, y: ypos, width: width + 18, height: 18))
            textlable.layer.borderWidth = 1.8
            textlable.layer.cornerRadius = 8
            textlable.layer.borderColor = UIColor(red:0.00, green:0.48, blue:1.00, alpha:1.0).cgColor
            textlable.textColor = UIColor(red:0.00, green:0.48, blue:1.00, alpha:1.0)

            textlable.text = word
            textlable.font = UIFont(name: "verdana", size: 13.0)
            textlable.textAlignment = .center
            textlable.isUserInteractionEnabled = true
            ypos = ypos + 25

            textlable.tag = tag
            tags.append(tag)
            tag = tag + 1

            let tap = UITapGestureRecognizer(target: self, action: #selector(self.tapFunction(_:)))
            //textlable.addTarget(self, action: #selector(tapFunction(_:)), for: .touchUpInside)

            textlable.addGestureRecognizer(tap)
            viewq.addSubview(textlable)
        }
    }

    func tapFunction(_ recognizer: UITapGestureRecognizer) {
        print(viewq.viewWithTag(1))

        let tag = viewq.viewWithTag(1) as! UILabel
        tag.layer.borderColor = UIColor .red.cgColor
        tag.textColor = UIColor .red
        print("Added")
    }
}

extension String {

    func widthOfString(usingFont font: UIFont) -> CGFloat {
        let fontAttributes = [NSFontAttributeName: font]
        let size = self.size(attributes: fontAttributes)
        return size.width
    }

    func heightOfString(usingFont font: UIFont) -> CGFloat {
        let fontAttributes = [NSFontAttributeName: font]
        let size = self.size(attributes: fontAttributes)
        return size.height
    }
}

1 个答案:

答案 0 :(得分:1)

您的tapFunction可以轻松地从手势中获取点按的视图。无需标签:

func tapFunction(_ recognizer: UITapGestureRecognizer) {
    if let tappedLabel = recognizer.view as? UILabel {
        tappedLabel.layer.borderColor = UIColor.red.cgColor
        tappedLabel.textColor = .red
        print("Added")
    }
}