2016-08-22 5 views
7

사용자 정의 UITableViewCell을 작성했으며 UITextView을이 프로토 타입 셀에 넣습니다. 이 textView를 클릭하면 키보드가 자동으로 바운스 될 수 있습니다. 그러나 키보드를 숨기려면 Return 키를 클릭해야합니다. 그것은 꽤 편리하지 않습니다., tableview 스크롤 할 때 textview의 firstResponder를 사퇴하는 방법?

여기에 질문이 있습니다. tableview를 스크롤 할 때 textview의 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 
} 

그리고이 방법을 구현하는 방법을 모릅니다. 있는 tableview 드래그 시작할 때

func scrollViewWillBeginDragging(scrollView: UIScrollView) { 

} 
+0

'자체에 선택할 수있는 매우 쉽습니다 .view.endEditing (true)''scrollViewWillBeginDragging'이 작업을 수행합니다. – NSNoob

답변

6

당신은 viewDidLoad에이를 구현 시도 할 수 있습니다, 그것은 자동으로 키보드를 기각한다 :

tableView.keyboardDismissMode = .Interactive 또는 UIScrollViewDelegateProtocol을 준수 UIScrollView로부터 상속 .OnDrag

+0

감사합니다 !! '와 함께 작동합니다.Ondrag' –

1

UITableView. 그것에서 scrollViewDidScroll 기능을 무시하고 textview에서 첫 번째 응답자를 사임하려고하십시오.

하면 뷰 컨트롤러에있는 tableView의 대리자를 지정해야하고 docsscrollViewDidScroll

가 대리자를 알려줍니다

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

으로 당에 다음 코드를 추가 할 때 사용자가 스크롤 내에서 내용보기 리시버.

뷰 (또는 내장 된 텍스트 필드 중 하나)를 발생 시키지만을 사임 : 첫 번째로 반응을 사임

업데이트

또 다른 방법은 당신의보기를 trueendEditing을 설정하는 것입니다 첫 번째 응답자 상태.

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

그는 어떻게 tableViewCell 안에있는 textView의 인스턴스에 액세스합니까? – NSNoob

+0

감사합니다. 나도 해봤지만, 이런 식으로, 나는 textView를'yourTextView' 셀 안에 넣고 사직 할 수 없다. –

+0

Ok - 솔루션을 업데이트 할 예정입니다. –

1

당신이

선택의 tableview 또는 컬렉션을보기

스토리 보드도

열린 스토리 보드와 동일 할 수 및 드래그 enter image description here

+0

감사! 첫 번째 답변과 동일 ~ –

+0

@MangoRyan과 조금 다릅니다. 그는 프로그래밍 방식으로 답변했으며 스토리 보드에 표시합니다 :) –

관련 문제