使用标签创建UIImageView。Swift 3

3

我是一个有用的助手,可以为您翻译文本。

我有一个保存值的整数n。我想创建一个循环,该循环将使用连续的标签创建UIImageViews。

我的代码:

var n:Int = 1
 if arrayOfEmojis.count != 0 {
        for emoji in arrayOfEmojis {

                let emojiView  = self.view.viewWithTag(n) as! UIImageView
                emojiView.image = emoji
                 ...

}

但是emojiView没有被创建。当我使用"if let emojiView ="时,它也没有被创建。我是否错误地使用了"viewWithTag(n)"函数?

_______编辑_________

使用.viewWithTag()是错误的,必须使用.tag属性分配标签。现在,我想使用分配的标签获取该视图。我想现在可以使用.viewWithTag()函数吗?当调用以下内容时出现意外发现nil...

n在先前的循环中使用,其中创建了imageViews,并将其更新为已创建的imageViews的数量):
if arrayOfEmojis.count != 0 {
        for j in 1...n {

            var view1 = self.view.viewWithTag(j) as! UIImageView
            arrayOfEmojiViews.append(view1)
        }
    }

viewWithTag(_:) 并不创建任何东西 - 它仅仅返回视图层次结构中具有匹配标签的现有视图。 - Paul.s
我的猜测是,这个编辑实际上是一个新问题。原因可能是:(1)使用viewWithTag时出现了nil,因为没有匹配到您要搜索的值。为什么?(2)可能是因为创建标记值的循环在循环内部设置了值,然后再递增它。结果是,任何标记创建都会比实际值多1。 - user7014451
是的,Ahmad已经回答了原始问题。然而,后来我需要再次使用.viewWithTag()。但它没有起作用。决定更新我的问题,因为它与.viewWithTag()的相同主题相关。 - Evgeny
1个回答

1
我认为您误解了使用viewWithTag(_:​)的目的:

返回其标记与指定值匹配的视图。

它不会创建新实例,而是用于根据其标记值获取特定标识的视图。

如果我没有错,您想要创建新实例,通过提到:

我想创建一个循环,将创建连续标签的UIImageViews

这应该类似于:

var n:Int = 1
var currentTag = 0
if arrayOfEmojis.count != 0 {
    for emoji in arrayOfEmojis {

        let emojiView = UIImageView(image: emoji)
        emojiView.tag = currentTag
        currentTag += 1
        // don't forget to set the frame for the emojiView
        ...
    }
}

对于每次迭代,都会创建一个UIImageView的新实例-使用init(image:​)初始化器-并根据currentTag变量的当前值“连续”设置其tag值。


它起作用了,谢谢你的解释。不过,在程序的下方,我又必须再次使用 .viewWithTag 来获取带有该标签的视图。我已将该代码添加到我的原始问题中。感谢您的建议。 - Evgeny
你能解释一下你遇到的新问题是什么吗? - Ahmad F
我正在使用数组中的图像(表情符号)创建imageView,这发生在viewDidLoad中。 然后,我不仅想保存视图上的图像,还要保存它们的框架,因为用户一直在移动、缩放和旋转这些imageView。 我要将更改后的imageViews保存到数组中。在数组中,我尝试通过它们在创建时分配的标签获取imageView。 但是这并没有发生,具体来说是在'.viewWithTag()'行中。您可以在原始问题的末尾找到我的代码。 - Evgeny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接