2012-04-12 3 views
0

Есть ли способ сообщить UITableView не освободить ячейки, когда они становятся невидимыми?Сообщите UITableView, чтобы не освобождать ячейку, когда она не видна

Я прошу об этом, потому что у меня есть эта проблема: У меня есть UITableView, используемый как «вставка». Внутри ячеек у меня много UITextView. Когда я нажимаю UITableView, я посылаю «startFirstponder» в первую ячейку, чтобы начать просмотр с открытой клавиатуры. Это работает правильно.

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

Я знаю, что я могу проверить, когда UITextView возвращается видимым и отправить другой becomeFirstResponder, но я хотел бы знать, если я могу достичь своей цели с первым запросом :-)

Благодарит вас Привет Fabio

+0

Возможно, вы захотите заблокировать прокрутку при открытии мягкой клавиатуры. Мобильные устройства имеют ограниченную память. Технически невозможно, чтобы клетки не закрывали экран. И если вам удалось сохранить их, ваше приложение будет убито из-за чрезмерного использования памяти. –

+0

Согласитесь с @HeShiming. Кроме того, ваши пользователи, вероятно, не хотят вводить текст в поле, которое они не видят. – danh

+0

@HeShiming мы говорим о «вставном представлении», количество ячеек ограничено :-) Очевидно, что я должен заботиться о памяти, но я уже делаю это (не используя ARC в этом APP) ... Я ' m очень осторожно о памяти :-D. Хорошая идея заблокировать прокрутку и с учетом danh о написании внутри невидимого текста :-D Спасибо – LombaX

ответ

0

Вот некоторые новые сведения я нашел:

я увидел, что клавиатура закрывалась только в первый раз. Пример: представление было загружено с помощью UITextView как firstResponder. Скроллинг, клавиатура закроется. Но, снова нажав на UITextView, клавиатура откроется снова, а затем никогда не закрывается, даже если прокрутка снова.

В поисках понимания причин, я обнаружил это:

  • В «viewDidLoad» Я устанавливало первый ответчику
  • в cellForRowAtIndexPath я добавлял UITextView как подвид
  • cellForRowAtIndexPath вызывается после ViewDidLoad

Когда UITextView ушел с первого ответчика, я увидел, что это происходит, потому что UITableView был se для этой конкретной ячейки, вызывающей метод CellForRowAtIndexPath. Но, снова нажав, CellForRowAtIndexPath вызывается только для других ячеек, а не для выбранного. Казалось, что если UITextView был настроен как первый ответчик ПОСЛЕ настройки UITableView, ячейка была сохранена, даже если она не была видимой.

Затем я попытался переместить «becomefirstresponder» в «viewDidAppear» (так называемый ПОСЛЕ установки UITableView), а затем, волшебным образом, проблема была решена :-) Клетка больше не срабатывает, если UITextView внутри первый ответчик.

Единственная оставшаяся проблема заключалась в следующем: вызов «startFirstponder» в viewDidApper вызывал на клавиатуре задержку отображения на экране. Чтобы этого избежать, я вызвал startFirstResponder в viewDidLoad, затем в viewDidAppear я ушел в отставку и снова вызвал startFirstResponder.

Надеюсь, что это поможет

0

при использовании tableview в камере обычно он не выпускает ячейку. В первый раз он будет выделять некоторое количество ячеек, которые отображаются в первой таблице времени, после чего он использует те же ячейки, что и повторно использует одну и ту же ячейку для другой даты по разному пути индекса, вы должны были использовать UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

+0

Нет, я удалил его. UITableview не переопределяет ячейку для повторного использования, но она просто освобождает ячейку, которая не видна (это по дизайну и правильно). Я спрашивал, есть ли какой-нибудь «магический метод», чтобы избежать этого, очевидно, только в этом конкретном случае. Спасибо – LombaX

+0

, когда вы выделите ячейку, которую вы, возможно, использовали autorelease, которая заставит ячейку выпустить ее самостоятельно операционной системой, поэтому попробуйте ее с помощью autorelease –