2016-08-22 9 views
7

मैंने एक कस्टम UITableViewCell बनाया, और UITextView इस प्रोटोटाइप सेल के अंदर रखा गया था। जब मैं इस टेक्स्ट व्यू पर क्लिक करता हूं, तो कीबोर्ड स्वचालित रूप से उछाल सकता है। हालांकि, अगर मैं कीबोर्ड को छिपाना चाहता हूं, तो मुझे Return कुंजी पर क्लिक करना होगा। यह काफी सुविधाजनक नहीं है।UITextView एक UITableViewCell के अंदर, टेक्स्टव्यू के पहले रीस्पॉन्डर को इस्तीफा कैसे दें जब तालिका देखें स्क्रू?

यहां सवाल है। जब मैं तालिकादृश्य स्क्रॉल करता हूं तो कीबोर्ड को छिपाने के लिए मैं टेक्स्ट व्यू के firstResponder को इस्तीफा कैसे दे सकता हूं।

cellForRowAtIndex विधि नीचे है।

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 
} 

यहां कुछ विधियां लागू की गई हैं।

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

और मुझे नहीं पता कि इस विधि को कैसे कार्यान्वित किया जाए।

func scrollViewWillBeginDragging(scrollView: UIScrollView) { 

} 
+0

'स्वयं पर का चयन कर सकते है .view.endEditing (true) 'आपके' scrollViewWillBeginDragging' में नौकरी करेगा। – NSNoob

उत्तर

6

आप viewDidLoad पर यह लागू कोशिश कर सकते हैं, यह ऑटो कीबोर्ड ख़ारिज जब tableview खींच शुरू कर देंगे:

tableView.keyboardDismissMode = .Interactive या .OnDrag

+0

धन्यवाद !! यह 'के साथ काम करता है।Ondrag' –

1

UITableViewUIScrollView कि UIScrollViewDelegateProtocol के अनुरूप से विरासत में मिली। इससे scrollViewDidScroll फ़ंक्शन ओवरराइड करने का प्रयास करें और टेक्स्टव्यू से पहले उत्तरदाता को इस्तीफा दें।

आपके विचार नियंत्रक से tableView के किसी प्रकार का ध्यान रखें, और उसके बाद निम्न कोड

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

के अनुसार docsscrollViewDidScroll

प्रतिनिधि बताता जोड़ने जब उपयोगकर्ता स्क्रॉल के भीतर सामग्री दृश्य रिसीवर।

दृश्य (या इसके एम्बेडेड पाठ क्षेत्रों में से एक) का कारण बनता है इस्तीफा देने के लिए:

अद्यतन

एक और दृष्टिकोण पहले प्रत्युत्तर इस्तीफा देने के लिए अपने दृश्य के लिए true को endEditing स्थापित करने के लिए है पहली प्रतिक्रियाकर्ता की स्थिति।

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

वह टेक्स्ट व्यू के उदाहरण को कैसे एक्सेस करेगा जो तालिका ViewCell के अंदर है? – NSNoob

+0

धन्यवाद! मैंने इसे भी आजमाया है, लेकिन इस तरह, मैं टेक्स्ट नहीं देख सकता हूं 'yourTextView' सेल के अंदर और इसे इस्तीफा दे रहा हूं। –

+0

ठीक है - मैं समाधान –

1

यह काफी आसान आप स्टोरीबोर्ड भी

खुला स्टोरीबोर्ड

चयन tableview या संग्रह दृश्य

साथ भी ऐसा ही और खींचें enter image description here

+0

धन्यवाद! पहले उत्तर के समान ही ~ –

+0

यह थोड़ा अलग @MangoRyan है, उसने इसे प्रोग्रामेटिक रूप से उत्तर दिया और मैं आपको स्टोरीबोर्ड में दिखाता हूं :) –

संबंधित मुद्दे