2016-08-22 20 views
7

Utworzono niestandardowy UITableViewCell, a UITextView został umieszczony w tej prototypowej komórce. Kiedy kliknę na ten tekst, klawiatura może odbijać się automatycznie. Jeśli jednak chcę ukryć klawiaturę, będę musiał kliknąć przycisk Return. To nie jest całkiem wygodne.UITextView wewnątrz UITableViewCell, jak zrezygnować firstResponder textview podczas przewijania tableView?

Oto pytanie. W jaki sposób mogę zrezygnować z ukrywania klawiatury textView podczas przewijania widoku tabeli.

cellForRowAtIndex Metoda jest poniżej.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = UITableViewCell() 
    if(indexPath.section == 0){ 
     cell = self.tableView.dequeueReusableCellWithIdentifier("InputCell")! 
     let textView = cell.viewWithTag(102) as! UITextView 
     textView.editable = true 
     textView.keyboardType = UIKeyboardType.Default 
     textView.delegate = self 
     textView.targetForAction(#selector(FeedBackViewController.getTextViewInsideCell(_:)), withSender: textView) 
    } 
    if(indexPath.section == 1){ 
     cell = self.tableView.dequeueReusableCellWithIdentifier("ConfirmButtonCell")! 
     let label = cell.textLabel 
     label?.text = "send" 
     label?.textAlignment = NSTextAlignment.Center 
     label?.textColor = UIColor.redColor() 
    } 
    return cell 
} 

Oto kilka metod, które zaimplementowałem.

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool{ 
    if(text == "\n"){ 
     textView.resignFirstResponder() 
     return false 
    } 
    return true 
} 

I nie mam pojęcia, jak wdrożyć tę metodę.

func scrollViewWillBeginDragging(scrollView: UIScrollView) { 

} 
+0

'własny .view.endEditing (true) 'w twoim' scrollViewWillBeginDragging' wykona zadanie. – NSNoob

Odpowiedz

6

Można spróbować wdrożyć to na viewDidLoad, to auto odrzucić klawiatury podczas tableview rozpocząć przeciąganie:

tableView.keyboardDismissMode = .Interactive lub .OnDrag

+0

Dzięki! Działa z '.Ondrag' –

1

UITableView odziedziczone UIScrollView które odpowiada UIScrollViewDelegateProtocol. Spróbuj zastąpić z tego funkcję scrollViewDidScroll i zrezygnuj z pierwszego kontaktu z widoku tekstowego.

należy przypisać delegata Tableview do kontrolera widoku, a następnie dodaj następujący kod

func scrollViewDidScroll(scrollView: UIScrollView) { 
    yourTextView.resignFirstResponder() 
} 

Zgodnie docsscrollViewDidScroll

opowiada delegata, gdy użytkownik przewija zawartości widoku w ramach odbiorca.

Aktualizacja

Innym podejściem do dymisji pierwszy responder jest ustawienie endEditing do true do widzenia:

powoduje view (lub jeden z jego wbudowanych pól tekstowych) do rezygnacji status pierwszego respondenta.

func scrollViewDidScroll(scrollView: UIScrollView) { 
    self.view.endEditing(true) 
} 
+0

W jaki sposób uzyskałby dostęp do instancji textView, która znajduje się wewnątrz tableViewCell? – NSNoob

+0

Dzięki! Próbowałem też, ale w ten sposób, nie mogę uzyskać textView 'yourTextView'wewnątrz komórki i zrezygnuj z niej. –

+0

OK - zaktualizuję rozwiązanie –

1

jest to dość łatwe Można zrobić to samo z ujęć zbyt

otwartym storyboard

wybierz tableview lub zbiór widok

i wybierz na Drag enter image description here

+0

Dzięki! Tak samo jak pierwsza Odpowiedź ~ –

+0

to trochę inaczej @MangoRyan, odpowiedział programowo i pokazuję w storybooku :) –

Powiązane problemy