iPhone에서 Return 키를 만드는 방법은 키보드를 사라지게합니까?


108

두 가지 UITextFields(예 : 사용자 이름 및 암호)가 있지만 키보드의 리턴 키를 눌러도 키보드를 제거 할 수 없습니다. 어떻게 할 수 있습니까?

답변:


242

먼저 다음 UITextFieldDelegate과 같이 View / ViewController의 헤더 파일에서 프로토콜 을 준수해야합니다 .

@interface YourViewController : UIViewController <UITextFieldDelegate>

그런 다음 .m 파일에서 다음 UITextFieldDelegate프로토콜 메서드 를 구현해야합니다 .

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

    return YES;
}

[textField resignFirstResponder]; 키보드가 해제되었는지 확인합니다.

.m에서 텍스트 필드를 초기화 한 후 뷰 / 뷰 컨트롤러를 UITextField의 델리게이트로 설정했는지 확인하십시오.

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on

7
텍스트 필드를 클릭하고 유틸리티 패널을 표시하고 Connections Inspector를 클릭하고 델리게이트 아울렛을 뷰 컨트롤러로 드래그하여 스토리 보드에서 델리게이트를 구현할 수도 있습니다.
guptron 2013 년

1
textFieldShouldReturn 메서드는 어디에 구현되어 있습니까? 해당 클래스를 UITextField의 델리게이트로 설정해야합니다. 델리게이트 콜백은 델리게이트로 설정된 클래스와 클래스가이를 구현 한 경우에만 발생합니다.
Sid

1
헤더의 UITextFieldDelegate를 따르도록 MyViewController를 설정 했습니까?
Sid

1
myTextField가 올바르게 할당되고 nil이 아닌 한. 기술적으로 nil (크래시 없음)이면 괜찮지 만 아무것도하지 않습니다. :)
Sid

1
그리고 내가 추가 할 수 있다면 UIFloatLabelTextField와 같은 재정의 된 UITextField 클래스를 사용하고 있는지는 중요하지 않습니다. 여전히 yourTextField.delegate = self; !!!가 필요합니다.
Gellie Ann

19

다음과 같이 UITextFieldDelegate 메서드를 구현합니다.

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}


6

UITextFields에는 위임 객체 (UITextFieldDelegate)가 있어야합니다. 대리자에서 다음 코드를 사용하여 키보드를 사라지게합니다.

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
}

지금까지 작동해야합니다 ...


안녕 친구, 나는 당신이 위에서 말한 것을 수행했지만 여전히 키보드를 사라지게 할 수 없습니다. 아이디어가 있습니까? 감사.
K.Honda

안녕, 크리스, 이제 모든 것이 분류되었습니다. 감사.
K.Honda

6

몇 번의 시련을 겪었고 같은 문제가 있었는데 이것은 나를 위해 일했습니다.

-에서 철자를 확인하십시오.

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

나는 textField대신에 textfield"F"를 대문자로 수정 하고 빙고 !! 효과가 ..


4

리턴 키를 누르면 다음을 호출하십시오.

[uitextfield resignFirstResponder];

코너 님, 리턴 키를 눌렀을 때 앱이 어떻게 알 수 있나요? 감사.
K.Honda

3

말이되는 것을 찾아 내는데 꽤 많은 시간을 보낸 후, 이것이 제가 모아 놓은 것이고 그것은 매력처럼 작동했습니다.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.미디엄

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

도움이 되었기를 바랍니다!


3

UITextField의 Delegate를 ViewController로 설정하고 파일의 소유자와 UITextField 사이에 참조 아웃렛을 추가 한 다음이 메서드를 구현합니다.

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}

3

미리 정의 된 클래스 대신 이것을 추가하십시오.

class ViewController: UIViewController, UITextFieldDelegate {

키보드 바깥 쪽을 클릭 할 때 키보드를 제거하려면

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

Enter 키를 눌렀을 때 키보드를 제거하려면

viewDidLoad ()에이 줄을 추가합니다.

inputField는 사용 된 textField의 이름입니다.

self.inputField.delegate = self

이 기능을 추가하십시오

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }

2

스위프트 2 :

이것은 모든 일을하기 위해 한 일입니다!

가까운 키보드 Done버튼을 누르거나 Touch outSide, Next다음 입력으로 이동합니다.

먼저 StoryBoard에서 TextFiled Return Key를 다음 Next으로 변경 합니다.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}

태그 사용은 Apple에서 명시 적으로 권장하지 않습니다. 대신 IBOutletCollection을 사용할 수 있습니다
Antzi

2

신속하게 UITextfieldDelegate위임 해야 합니다. 중요한 것은 viewController에서 다음과 같이 잊지 마세요.

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}

0

uiTextField에 IBAction을 추가 할 수 있으며 (관련 이벤트는 "Did End On Exit"임) IBAction의 이름은 hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

또한 다른 텍스트 필드 또는 버튼에 적용 할 수 있습니다. 예를 들어, 키보드를 숨기기 위해 클릭 할 때 뷰에 숨겨진 버튼을 추가 할 수 있습니다.



0

경고 상자 텍스트 파일에 쓸 때 키보드를 사라지게하려면

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.