2016-12-06 3 views
0

Я новичок в swift, используя swift 3, я построил табличное представление, которое читает группу изображений, и я хочу иметь его как показано ниже: , когда пользователь выбирает изображение в виде таблицы Я показываю его в UIImageView и при снятии выделения изображения, которое он уже выбрал в представлении таблицы, которое должно быть удалено из UIImageView (множественный выбор включен). Мой код ниже работает только для одного выбора изображения, однако, если выбрано несколько изображений, а затем отменено, последний выбранный только удаляется из UIImageview. Так что мой вопрос, как я могу удалить UIImageView, который принадлежит выключенной записи в UITableViewКак удалить UIView из супервизора с определенной позицией программно

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     image_view.image = UIImage(data: Saveddata[indexPath.row].photo as! Data) 
      //create image view programmatically 
      currentImageView = UIImageView(frame: CGRect(x: 130 + (i * 10), y: 50 + (i * 5), width: 50, height: 100)) 
      currentImageView.contentMode = .scaleAspectFit 
      currentImageView.image = image_view.image 
      view.addSubview(currentImageView as UIView)   
    } 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 

     currentImageView.removeFromSuperview() 


    } 
+0

Вы не можете просто удалить компонент просмотра или пользовательского интерфейса в 'UITableViewCell'. он может использоваться повторно для других строк. То, что вы можете сделать, это установить флаг с использованием глобального массива и сохранить 'indexPath.row' в качестве индекса для тех, которые вы удалили. Затем в вашем 'cellForRow', проверьте, существует ли этот индекс, скройте изображение или измените ограничение' width' на 0 – xmhafiz

+0

, избегайте uisng 'addSubview', вместо этого используйте раскадровку или xib с IBOutlet. Это предотвращает создание дублирующего представления внутри ячейки – xmhafiz

+0

@ h44f33z, спасибо, однако, я не пытаюсь удалить его из tableview. Я пытаюсь удалить его из созданного мной UIview и добавить изображение к нему, когда это изображение выбрано в tableview – rania

ответ

0

вы можете использовать tag для каждого UIImageView на основе indexPath.row, чтобы вы могли обратиться по тэгу.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let image = UIImage(data: Saveddata[indexPath.row].photo as! Data) 
    //create image view programmatically 
    let imageView = UIImageView(frame: CGRect(x: 130 + (i * 10), y: 50 + (i * 5), width: 50, height: 100)) 
    imageView.contentMode = .scaleAspectFit 
    imageView.tag = 100 + indexPath.row 
    imageView.image = image 
    view.addSubview(imageView as UIView) 
} 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    // get imageView by its tag   
    let deselectedImageView = view.viewWithTag(100 + indexPath.row) as! UIImageView 
    deselectedImageView.removeFromSuperview() 


} 
+0

любил эту идею, однако она вернула ошибку: не удалось передать значение типа «UIView» (0x10ea19b40) в «UIImageView» (0x10ea1b288). – rania

+0

@rania обновил мой ответ, добавив 100 к тегу, поэтому он будет использовать тег 0 – xmhafiz

+0

OMG благодарит миллион, сейчас он работает, и я получил его. высоко оценили вашу помощь, давно искали выход – rania

0

Если вы хотите обновить внешний вид клеток при выборе/не выбран, вы должны переопределить метод setSelected(_:animated:) внутри UITableViewCell подкласса вместо пытаться обновить его непосредственно из метода UITableViewDelegate:

override func setSelected(_ selected: Bool, animated: Bool) { 
    // Do whatever you want depending on the selected value 
} 
Смежные вопросы