iOS UITextViews задерживает данные, хотя я очищаю массив - PullRequest
0 голосов
/ 19 апреля 2019

На рисунке ниже показана графическая иерархия отладки Xcode для UIViewController.Похоже, мне нужно уничтожить дополнительные данные из UITextViews, которые воссоздаются после редактирования в массиве UITextViews.Каждый раз, когда я делаю изменение, я устанавливаю массив UITextViews в [], а затем воссоздаю его с обновленными данными.Несмотря на то, что я проверяю, что массив UITextView действительно сбрасывается на ноль элементов, а затем воссоздается с ожидаемым количеством элементов, эти призрачные изображения задерживаются на экране, и иерархия отладки показывает, что что-то не удаляется.

Я подозреваю, что есть какая-то служебная работа, которую я должен сделать, чтобы найти и уничтожить дополнительные данные, связанные с UITextViews, и что установка массива обратно в ноль не очищает все из моего подпредставления, но я не уверен, что этовозможно.Я надеюсь, что моя ошибка кажется очевидной тем, у кого больше опыта, и вы укажете мне правильное направление.

enter image description here

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

var topOfViewFrame: CGFloat = 0
textViewArray = []
for textBlock in textBlocks.textBlocksArray { // a textBlock has formatting data for a UITextView
    let textBlockHeight = CGFloat(textBlock.numberOfLines) * textBlock.blockFontSize
    let viewFrame = CGRect(x: 0, y: topOfViewFrame, width: textBoxWidth, height: textBlockHeight)
    var newTextView = UITextView(frame: viewFrame)
    newTextView.center = CGPoint(x: screenView.frame.width/2, y: topOfViewFrame + (textBlockHeight/2)) // screenView is the 320x240 subView holding the [UITextViews]
    let viewFont = UIFont(name: "AvenirNextCondensed-Medium", size: textBlock.blockFontSize)
    newTextView.font = viewFont
    newTextView.text = textBlock.blockText
    newTextView = configureTextBlockView(textBoxView: newTextView, textBlock: textBlock)
    textViewArray.append(newTextView)
    screenView.addSubview(newTextView) // screenView is the subview holding the [UITextViews]
    topOfViewFrame += newTextView.frame.height // put the next UITextView directly below the previous one
}

Спасибо!

1 Ответ

2 голосов
/ 19 апреля 2019

Если вы хотите удалить все textViews из 'screenView', недостаточно просто очистить массив.Вы должны удалить его из суперпредставления:

screenView.subviews.forEach({ $0.removeFromSuperview() })
...