【问题标题】:Is there a "tag" correspondent?有“标签”通讯员吗?
【发布时间】:2016-10-20 06:30:44
【问题描述】:

我想知道是否还有诸如tag 之类的东西?

我已经在我的图像上使用了标签,但我必须使用多个标签来创建我的代码,我还没有找到方法来做......因此我想知道是否还有其他事情类似于 tag?另一种“标记”图像的方法?

(image.tag = 1) ---> 标记示例。

【问题讨论】:

  • image.tag = [[Nsstring stringwithformate:@"100%i",动态值]integerValue];我的理解是对还是错?
  • @HariKrishnan.P 我已经在使用标签 (Image1.tag = 1)——但我想知道是否可以为同一个变量添加第二个标签?例如Image1.secondtag = 2
  • 为他们命名?然后使用 UIImage(named: "")
  • 您是通过编程方式设置还是在界面中设置。在 tableview 或 common view 中使用
  • @Dershowitz123 不会给你一个新的 UIImage 实例而不是给你需要的旧实例吗?

标签: ios swift tags


【解决方案1】:

您可以构建一个 Singleton 类来跟踪 UIImage 和标签之间的关系。

class TaggedImages {
    static let sharedInstance = TaggedImages()
    private var dict = [Int:Set<UIImage>]()
    private init() { }

    func add(tag:Int, to image:UIImage) {
        var set = dict[tag] ?? Set<UIImage>()
        set.insert(image)
        dict[tag] = set
    }

    func remove(tag:Int, to image:UIImage) {
        var set = dict[tag] ?? Set<UIImage>()
        set.remove(image)
        dict[tag] = set
    }

    func images(with tag: Int) -> [UIImage] {
        guard let set = dict[tag] else { return [] }
        return Array(set)
    }

    func tags(by image: UIImage) -> [Int] {
        return dict.filter { $0.1.contains(image) }.map { $0.0 }
    }
}

如您所见,该类包含一个字典,其中键是Int(标签),值是UIImage(s)Set

现在我们可以

  • 将一组图像与给定标签相关联。
  • 每个图像可以关联到可变数量的标签。

扩展 UIImage

接下来我们给UIImage添加4个方法

extension UIImage {
    func add(tag:Int) {
        TaggedImages.sharedInstance.add(tag, to: self)
    }

    func remove(tag:Int) {
        TaggedImages.sharedInstance.remove(tag, to: self)
    }

    var tags: [Int] {
        return TaggedImages.sharedInstance.tags(by: self)
    }

    func has(tag tag:Int) -> Bool {
        return self.tags.contains(tag)
    }
}

之前扩展中定义的所有方法都使用TaggedImages共享实例来:

  1. 保存当前图像和标签之间的关系
  2. 删除关系图像标签
  3. 检索与当前图像关联的所有标签

如何使用

let sky = UIImage()
sky.add(tag: 1)
sky.add(tag: 2)
sky.add(tag: 3)
sky.tags // [2, 3, 1]

sky.has(tag: 1) // true
sky.has(tag: 2) // true
sky.has(tag: 100) // false

sky.remove(tag:1)
sky.has(tag: 1)  // false

sky.remove(tag:1)
sky.has(tag: 1) // false
sky.tags // [2,3]

【讨论】:

    【解决方案2】:

    您可以为每个图像值添加一个键并将它们存储在字典中。

    // First make an array of images
    var ArrayOfImages = [UIImage]
    // code to populate array
    // Use ArrayOfImages.append(image), and add tag to each image.
    // Then, Make a dictionary like so.
    var dict : [Int : UIImage] = [:]
    for index in 0...(ArrayOfImages.count - 1)  {
        dict[intvalueofChoice] = ArrayOfImages[index]  
    }
    

    基本上每张图片对应一个标签,也是一个值对应一个整数类型的键。

    要访问您选择的特定标签的图像,

    var image =  dict[specificTag] // gives you your result..
    //  or 
    var image = yoursuperView.viewWithTag(specificTag)
    

    我没听错你的问题吗?

    我认为使用这种方法,您可以使用多个字典来存储具有不同整数键值或不同“标签”的相同图像

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2013-02-06
      相关资源
      最近更新 更多