2016-08-22 2 views
7

Ich erstellte eine benutzerdefinierte UITableViewCell, und eine UITextView wurde in diese Prototypzelle gelegt. Wenn ich auf diese Textansicht klicke, kann die Tastatur automatisch springen. Wenn ich jedoch die Tastatur verstecken möchte, muss ich auf Return Schlüssel klicken. Es ist nicht sehr praktisch.UITextView in einer UITableViewCell, wie man Textview's FirstResponder zurücknimmt, wenn TableView scrollt?

Hier ist die Frage. Wie kann ich die TextView's firstResponder zum Verstecken der Tastatur beim Scrollen der Tabellenansicht zurücktreten.

cellForRowAtIndex Methode ist unten.

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 
} 

Hier sind einige Methoden, die ich implementiert habe.

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

Und ich habe keine Ahnung, wie diese Methode zu implementieren.

func scrollViewWillBeginDragging(scrollView: UIScrollView) { 

} 
+0

'Selbst .view.endEditing (true) 'in Ihrem' scrollViewWillBeginDragging' erledigt die Aufgabe. – NSNoob

Antwort

6

Sie können dies auf viewDidLoad versuchen umzusetzen, wird es Tastatur automatisch entlassen, wenn Tableview Ziehen starten:

tableView.keyboardDismissMode = .Interactive oder .OnDrag

+0

Danke !! Es funktioniert mit '.Ondrag' –

1

UITableView von UIScrollView geerbt, die UIScrollViewDelegateProtocol entspricht. Versuchen Sie, scrollViewDidScroll Funktion von ihm zu überschreiben und First Responder von Textview abzubrechen.

Seien Sie sicher, Tableview Delegierter auf Ihre View-Controller, und fügen Sie dann den folgenden Code

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

Per docsscrollViewDidScroll

Weist den Delegierten, wenn der Benutzer scrollt der Inhalt Ansicht innerhalb der zuweisen Empfänger.

aktualisieren

Ein weiterer Ansatz Ersthelfer zum Rücktritt ist endEditing zu true für Ihre Ansicht zu setzen:

Verursacht die Ansicht (oder eines seiner eingebetteten Textfelder) die zum Rücktritt Ersthelfer-Status

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

Wie würde er auf die Instanz von textView zugreifen, die sich in einer TableViewCell befindet? – NSNoob

+0

Danke! Ich habe es auch versucht, aber auf diese Weise kann ich TextView 'yourTextView' nicht innerhalb der Zelle erhalten und ablehnen. –

+0

Ok - Ich werde die Lösung aktualisieren –

1

es ist ganz einfach Sie können auch mit Storyboard gleiche tun

offen Storyboard

wählen Tableview oder Sammlung Ansicht

und wählen Sie auf Drag enter image description here

+0

Danke! Wie die erste Antwort ~ –

+0

ist es etwas anders @MangoRyan, antwortete er tun es programmatisch und ich zeige Ihnen im Storyboard :) –

Verwandte Themen