2016-11-14 3 views
0

У меня есть условие, чтобы показать изображение всего за несколько строк. Но когда я прокручиваю, изображение отображается и для других случайных строк. Ниже мой код:Изображение UITableViewCell не отображается правильно при прокрутке

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
     //var data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary 
     if let data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary{ 
      if let name = data.objectForKey("NAME") as? String{ 
       cell.textLabel?.text = name 
      } 
      if completedTrainings.contains((data.objectForKey("MENU_ID") as? Int)!) { 
       cell.imageView?.frame = CGRect(x: (cell.bounds.width-110), y: 0, width: 100, height: 100) 
       cell.imageView?.image = UIImage(named: "CORRECT") 
      } 
     } 
     return cell 
    } 

Изображение должно появится только если меню идентификатор существует в законченных тренировках, но на прокручивается появляется на некоторых случайных клетках. Также изображение идет слева, но оно должно быть справа. Как я могу переместить его вправо?

+0

Создайте пользовательскую панель для просмотра таблицы, если вы хотите разместить изображение справа. –

+0

Добавьте эту строку, cell.imageView? .image = UIImage() –

+2

Ячейки повторно используются, вам нужно установить все элементы пользовательского интерфейса в определенное состояние, добавив предложения 'else'. – vadian

ответ

1

поскольку image является обязательным для UIImageView и можно установить изображение в nil если и не хочу, чтобы отобразить изображение, например, в коде, так как vadian предложил

 cell.imageView?.image = nil //reset the cell image first 
    cell.textLabel?.text = "" 
    if let data = objectArray[indexPath.section].sectionObjects[indexPath.row] as? NSDictionary{ 
     if let name = data.objectForKey("NAME") as? String{ 
      cell.textLabel?.text = name 
      cell.imageView?.image = nil //add this line 
     } 
     if completedTrainings.contains((data.objectForKey("MENU_ID") as? Int)!) { 
      cell.imageView?.frame = CGRect(x: (cell.bounds.width-110), y: 0, width: 100, height: 100) 
      cell.imageView?.image = UIImage(named: "CORRECT") 
     } 
1

Эй, вам нужно создать свой собственный подкласс UITableViewCell либо в раскадровке, либо в файле nib, и зарегистрировать для этого файла nib в вашем контроллере просмотра. Это даст вам возможность спроектировать любую ячейку, которую вы хотите, с любым макетом. Причина, по которой вы видите это изображение в случайных ячейках, состоит в том, что ваши ячейки повторно используются, и если вы не нашли изображение (если выполненоTrainings.contains), вы не устанавливаете скрытый образ или не устанавливаете его образ в виде пустого изображения (может быть, особый образ, который у вас есть для этого случая).

1

Решая многоразовых клетки. Попробуйте использовать if и else both. Только если могут возникнуть такие проблемы.

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