2017-03-19 37 views
2

我有一个int n保存值。 我想创建一个循环,将创建具有连续标签的UIImageViews。用标签创建UIImageView。 Swift 3

我的代码:

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

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

} 

但emojiView不创建。 当我使用“如果让emojiView =”它也只是没有创建。 我使用“viewWithTag(n)”func错了吗?

_______edit_________

使用.viewWithTag()错了,只好只是分配一个标签与.tag财产。 但是,现在,我想使用分配的标签来获取该视图。 我想现在我可以使用.viewWithTag() func? 我得到unexpectedly found nil...打电话时: (n在以前的环中imageViews创建使用,它被更新为创建imageViews的号码):我想你误会使用的目的

if arrayOfEmojis.count != 0 { 
     for j in 1...n { 

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

'viewWithTag(_ :)'不会创建任何内容 - 它只是返回视图层次结构中具有匹配标记的现有视图https://developer.apple.com/reference/uikit/uiview/1622429-viewwithtag –

+0

我的猜测 - 这个编辑实际上是一个新问题 - 是(1)你没有使用* viewWithTag *,因为没有匹配你正在搜索的值。为什么? (2)可能是因为创建标记值的循环将内*值设置为循环,然后*将其递增。最终结果是一个** n **值,它是在创建的任何标签上+1的值。 – dfd

+0

是的,原来的问题由艾哈迈德回答。然而,后者我需要再次使用.viewWithTag()。它不起作用。 决定更新我的问题,因为它在.viewWithTag()的同一主题上。 – Evgeny

回答

0

view​With​Tag(_:​)

返回其标记指定值一致的看法。

创建一个新的实例,它被用于获取基于其标签值的特定标识的视图。

如果我没有弄错,要创建新实例,通过提的是:

我想创建一个循环,将连续用 标签创建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一个新的实例将使用-by init(image:​) initializer-并设置其tag值“连续”基于当前的值创建currentTag变量。

+0

它的工作,感谢解释。 但是,在程序中,我必须再次使用.viewWithTag,现在才能使用该标记获取视图。我将该代码添加到我原来的问题中。将不胜感激您的建议。 – Evgeny

+0

你能解释一下你面临的新问题吗? –

+0

我正在创建图像(emojis)在数组中的imageViews。这发生在viewDidLoad中。 后者,我想保存的不仅仅是视图上的图像,还有它们的帧,因为用户已经平移,捏和旋转这些imageView。 我想将更改的imageView保存到数组中。在数组内部,我试图通过它们的标签获取imageViews,这是在创建时分配的。 而这种情况并没有发生,特别是在'.viewWithTag()'这一行。您可以在原始问题的末尾找到我的代码。 – Evgeny