如何通过标签定义标签

Posted

技术标签:

【中文标题】如何通过标签定义标签【英文标题】:how to define a label by a tag 【发布时间】:2018-04-02 22:15:22 【问题描述】:

我尝试制作一组​​标签,但我无法确定如何确定按下了哪个标签,以便更改它的颜色。如果我像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
    

【问题讨论】:

请参阅 this 了解您的 NSFontAttributeName 问题。 @Xcoder 回答!,我会读它的 :) 关于我的标签的主要问题你能说什么? 每个帖子只问一个问题。删除关于属性文本的部分。 【参考方案1】:

您的tapFunction 可以通过手势轻松获得点击的视图。不需要标签:

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

【讨论】:

以上是关于如何通过标签定义标签的主要内容,如果未能解决你的问题,请参考以下文章

Spring 自定义标签配置

使用 Laravel 的 Mailgun 驱动程序,你如何(优雅地)通过电子邮件发送自定义数据和标签?

如何获取顶点页面中使用的所有自定义标签信息?

如何通过include标签重用mybatis的代码段

Vim Taglist:如何从开源文件中跳转到标签定义

如何在不使用任何图像项目符号或任何跨度标签的情况下通过 CSS 定义 OL/LI 列表中字符的颜色?