2014-10-15 4 views
3

Я пытаюсь найти UIImageViews в представлении и назначить им несколько изображений на основе тегов. Но, к сожалению, я не мог назначить изображения переменной UIImageView из массива. Я не мог решить проблему.«Невозможно назначить изображение для * UIImageView *» Ошибка в SWIFT (iOS)

Ниже приведен код, который я написал.

var imageViewSlot = UIImageView() 
    for imageViewSlot in self.view.subviews 
    { 
     if (imageViewSlot .isMemberOfClass(UIImageView)) 
     { 
      for i in 1...imagePieces.count 
      { 
       if (imageViewSlot.tag == i) 
       { 
        imageViewSlot.image = imagePieces[i] as? UIImage //Error in this line 
       } 
      } 
     } 
    } 

Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

3
  • в коде выше var imageViewSlot = UIImageView() вы дали это как глобальные, и вы использовали такое же имя в для в утверждение, что является основной проблемой. Так из-за этого ему выигрыш знаете, какой тип объекта это, Так что мы должны упомянуть как этот (imageViewSlot as UIImageView).image = image

попробовать ниже код и проверить this link

for imageViewSlot in self.view.subviews 
    { 
     if (imageViewSlot .isMemberOfClass(UIImageView)) 
     { 
      for i in 1...imagePieces.count 
      { 
       if (imageViewSlot.tag == i) 
       { 
        var image = UIImage(named: imagePieces[i]) 
        (imageViewSlot as UIImageView).image = image 

       } 
      } 
     } 
    } 
+0

Спасибо за ответ. Но фактическая ошибка, которую я получаю, «imageViewSlot» даже не распознается как UIImageView по завершению Xcode, если я использую ее в «for loop». Если он распознан как UIImageView, я мог бы легко назначить ему изображения. –

+0

изменен ответ проверка один раз –

+0

Я пробовал ваш код. Но я получаю нижеприведенную ошибку в этой строке -> «var image = UIImage (named: imagePieces [i]) Ошибка: не может вызывать 'init' с помощью списка аргументов типа '(named: @lvalue AnyObject)' –

0

Во-первых, вы обращаетесь ваш массив с индексом за пределами его границ. Ваша петля for должна быть от 0 до и не включая imagePieces.count.

for i in 0..<imagePieces.count 
{ 
    if (imageViewSlot.tag == i) 
    { 
     imageViewSlot.image = imagePieces[i] as? UIImage //Error in this line 
    } 
} 

Во-вторых, это выглядит, как вы пытаетесь найти в вашем self.view.subviews в UIImageView, верно? Когда вы это сделаете, вы устанавливаете imageViewSlot на номер UIView. Я вижу, что вы проверяете, является ли он членом класса UIImageView, но это фактически не изменяет тип переменной imageViewSlot. Вам нужно будет указать imageViewSlot на номер UIImageView, чтобы иметь возможность установить image.

Я бы сделать это так (непроверенные):

// Note, you don't need to declare var imageViewSlot first 

for subview in self.view.subviews { 
    if let imageViewSlot = subview as? UIImageView { 
     for i in 0..<imagePieces.count { 
      if imageViewSlot.tag == i { 
       imageViewSlot.image = imagePieces[i] as UIImage 
      } 
     } 
    } 
} 

Если теги настроены правильно, то вы действительно не нужно, что внутренний цикл for либо. Вы можете упростить это примерно так:

for subview in self.view.subviews { 
    if let imageViewSlot = subview as? UIImageView { 
     if imageViewSlot.tag >=0 && imageViewSlot < imagePieces.count { 
      imageViewSlot.image = imagePieces[imageViewSlot.tag] as UIImage 
     } 
    } 
} 
+0

Спасибо за ответ. Но фактическая ошибка, которую я получаю, - «im ageViewSlot "даже не распознается как UIImageView по завершению Xcode, если я использую его в 'for loop'. Если он распознан как UIImageView, я мог бы легко назначить ему изображения. –

+0

Извините, я пропустил дополнительную проблему. Я отредактировал свой ответ. –

+0

Я попробовал ваш ответ. Im получает ошибку как «** Переменная привязка в состоянии требует инициализатора **» для «** let imageViewSlot as? UIImageView **» –

Смежные вопросы