2014-12-11 3 views
0

У меня есть динамический UITableViewController с одной ячейкой прототипа. В этой ячейке находятся 2 UITextViews. Каждый из них должен быть доступен для редактирования. Если это имеет значение: данные поступают из json-файла и существуют в форме NSArray. (Я программирую в Swift, поэтому правильный тип - [[[String: String]]]). Моя проблема в том, что при нажатии на один из текстовых элементов iPad кажется загруженным несколько секунд, и за это время основной поток блокируется и ничего не происходит. Затем появляется клавиатура, и я могу редактировать текст. После выбора первого из TextViews я могу быстро переключаться между ними. Даже если TextView подаст в отставку свой первый ответчик, я могу нажать на один из них, и клавиатура открывается очень быстро. Как я могу закрепить загрузку в начале? Я пытался позвонитьUITextView реагирует очень медленно в UITableViewCell

myTextView.becomeFirstResponder() 

в cellForRowAtIndexPah (только для первого TextView), а затем весь вид нагрузки, как 4-х секунд, прежде чем он показывает .. Я надеюсь, вы понимаете, что я имею в виду. Если вам нужен код, чтобы лучше понять его, дайте мне знать :)

Заранее благодарен!

EDIT # 1:

Класс обычая

class BeschreibungZusatzCell: UITableViewCell, UITextViewDelegate { 

    var delegate: CellDelegate? 

    @IBOutlet weak var titelTextView: CellTextView! 

    @IBOutlet weak var beschreibungTextView: CellTextView! 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     if titelTextView != nil { 
      titelTextView.delegate = self 
     } 
     if beschreibungTextView != nil { 
      beschreibungTextView.delegate = self 
     } 

    } 

    var titel: String! { 
     didSet{ 
      titelTextView.text = titel 
     } 
    } 

    var beschreibung: String! { 
     didSet{ 
      beschreibungTextView.text = beschreibung 
     } 
    } 


    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
     if text == "\n" { 
      textView.resignFirstResponder() 
      delegate?.cell(self, didChangeContentAtIndexPath: (textView as CellTextView).indexPath!, andSpalte: (textView as CellTextView).spalte!, toString: textView.text) 
      return false 
     } 
     delegate?.cell(self, didChangeContentAtIndexPath: (textView as CellTextView).indexPath!, andSpalte: (textView as CellTextView).spalte!, toString: textView.text) 
     return true 
    } 

} 

(Sorry для некоторых немецких имен, они не являются важными для понимания кода, я думаю :)) Так что клетка имеет делегат, который мой TableViewController. И каждый из двух TextViews также имеет делегат, который является ячейкой. Поэтому, если TextViews меняет свою строку, я могу получить сообщение в своем TableViewController. Мне нужно это, чтобы сохранить изменения.

+0

Это отдельная ячейка с уникальным идентификатором повторного использования? Мое единственное предположение, что могут быть несколько ячеек? Может помочь еще один код. – cdstamper

+0

Это один прототип, который используется для нескольких ячеек, которые выглядят одинаково, но имеют разные тексты. – Ben

+0

Хорошо, как вы получаете ссылку на этот текстовый вид? – cdstamper

ответ

0

Переведите becomeFirstResponder на номер didEndDisplayingCell или альтернативный метод. cellForRowAtIndexPath предназначен для настройки вашей ячейки, а не для выполнения задач, связанных с пользовательским интерфейсом.

+0

Я не хочу показывать клавиатуру в начале, это было просто проверить, будет ли это быстрее, но это не так. Я хочу показать клавиатуру, если пользователь вступает в один из этих текстовых полей. – Ben

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