Return 키를 누를 때 프로그래밍 방식으로 키보드 iOS를 닫는 방법
나는 viewController의 속성을 UITextField
프로그래밍 방식으로 만들었습니다 UITextField
. 화면에 리턴과 터치로 키보드를 닫아야합니다. 화면 터치를 해제 할 수 있었지만 Return 키를 누르면 작동하지 않습니다.
스토리 보드를 사용하고 UITextField
객체를 속성으로 생성하지 않고 직접 할당 및 초기화하는 방법을 보았습니다 . 할 수 있습니까?
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.미디엄
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
_username.delegate = self;
[self.view addSubview:self.username];
[_username resignFirstResponder];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesBegan:withEvent:");
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
}
@end
간단한 방법은 대리자 UITextField
를 self ( self.mytestField.delegate = self
) 에 연결하고 다음을 textFieldShouldReturn
사용 하는 방법에서 키보드를 닫는 것입니다.[textField resignFirstResponder];
키보드를 닫는 또 다른 방법은 다음과 같습니다.
[self.view endEditing:YES];
넣어 [self.view endEditing:YES];
키보드 (버튼 이벤트, 터치 이벤트 등)를 해고하고자하는 경우.
다음 UITextField
과 같은 대리자 메서드를 추가합니다 .
@interface MyController : UIViewController <UITextFieldDelegate>
그리고 textField.delegate = self;
다음 두 대리자 메서드를 추가하십시오.UITextField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
//보기에서 배경을 터치하여 키보드 숨기기
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
키보드를 닫으려면 간단히 이것을 사용하십시오.
UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
스위프트 3
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
SWIFT 4 :
self.view.endEditing(true)
또는
텍스트 필드의 델리게이트를 현재 뷰 컨트롤러로 설정 한 다음 :
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
목표 -C :
[self.view endEditing:YES];
또는
텍스트 필드의 델리게이트를 현재 뷰 컨트롤러로 설정 한 다음 :
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
App Delegate에서 다음과 같이 작성할 수 있습니다.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.window endEditing:YES];
}
이 방법을 사용하면 너무 많은 코드를 작성할 수 없습니다.
iOS 뷰 계층 구조에서 첫 번째 응답자가 무엇인지에 대한 아이디어를 얻으십시오. 텍스트 필드 내부를 터치 (또는 becomeFirstResponder
프로그래밍 방식으로 메시지 전달) 할 때 텍스트 필드가 활성화 (또는 첫 번째 응답자)되면 키보드가 표시됩니다. 따라서 첫 번째 응답자에서 텍스트 필드를 제거하려면 메시지 resignFirstResponder
를 거기에 전달해야합니다 .
[textField resignFirstResponder];
리턴 버튼에서 키보드를 숨기려면 델리게이트 메서드를 구현하고 메시지를 textFieldShouldReturn:
전달해야 resignFirstResponder
합니다.
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
다음은 내 코드에서 사용하는 것입니다. 매력처럼 작동합니다!
yourviewcontroller.h에 다음을 추가하십시오.
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
이제 .m 파일에서 다음을 ViewDidLoad 함수에 추가합니다.
- (void)viewDidLoad {
[super viewDidLoad];
//Keyboard stuff
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];
}
또한 .m 파일에 다음 함수를 추가하십시오.
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
키보드가 튀어 나온 후 키보드를 닫으려면 두 가지 경우가 있습니다 .
UITextField가 UIScrollView 내부에 있을 때
UITextField가 UIScrollView 외부에 있을 때
2. UITextField가 UIScrollView 외부에있는 경우 UIViewController 하위 클래스의 메서드를 재정의합니다.
모든 UITextView에 대한 델리게이트 도 추가 해야합니다.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
- A의 스크롤 뷰, 태핑 외부의 어떤 이벤트가 발생하지 않습니다 그래서이 경우, 탭 제스처 인식기 사용 , 드래그 앤 드롭 UITapGesture 스크롤 뷰를하고 그것을 위해 IBAction를를 작성 .
IBAction을 만들려면 Ctrl 키를 누른 채 UITapGesture를 클릭하고 viewcontroller의 .h 파일로 드래그합니다.
여기에서는 tappedEvent를 내 작업 이름으로 지정했습니다.
- (IBAction)tappedEvent:(id)sender {
[self.view endEditing:YES]; }
abouve 주어진 정보는 다음 링크에서 파생되었습니다. 자세한 정보를 참조하거나 abouve 데이터를 이해하지 못하는 경우 저에게 연락하십시오.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
UITextView
내부 의 s 그룹의 경우 ViewController
:
스위프트 3.0
for view in view.subviews {
if view is UITextField {
view.resignFirstResponder()
}
}
목표 -C
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// no need to cast
[view resignFirstResponder];
}
}
나는 이것이 다른 사람들에 의해 답변 된 것을 알고 있지만 배경 이벤트가없는 다른 기사 인 tableview 또는 scrollview를 발견했습니다.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
태그에는 iOS 만 표시되므로 Swift 1.2 및 iOS 8.4에 대한 답변을 게시 할 것이므로 뷰 컨트롤러의 swift 클래스에 다음을 추가하세요.
// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
return true
}
// MARK: -
또한 클래스 선언에 UITextFieldDelegate를 추가하고 텍스트 필드 위임을 self (뷰)로 설정하는 것을 잊지 마십시오.
스위프트 3에서
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
또는
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == yourtextfieldName
{
self.resignFirstResponder()
self.view.endEditing(true)
}
}
먼저 .h 파일에 텍스트 필드 delegete를 추가해야합니다. (BOOL)textFieldShouldReturn:(UITextField *)textField
이 메서드가 호출 되지 않음을 선언 하지 않으면 먼저 대리자를 추가하고 해당 메서드에 키보드 숨기기 코드를 작성합니다.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
이거 한번 해봐..
So here's what I did to make it dismiss after touching the background or return. I had to add the delegate = self in viewDidLoad and then also the delegate methods later in the .m files.
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
self.username.delegate = self;
[self.username resignFirstResponder];
[self.view addSubview:self.username];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
Simply use this in Objective-C to dismiss keyboard:
[[UIApplication sharedApplication].keyWindow endEditing:YES];
Add Delegate : UITextFieldDelegate
@interface ViewController : UIViewController <UITextFieldDelegate>
and then add this delegate method
// This should work perfectly
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UITextField class]]) {
[obj resignFirstResponder];
}
}];
}
when you using more then one textfield in screen With this method you doesn't need to mention textfield every time like
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
Swift 2 :
this is what is did to do every thing !
close keyboard with Done
button or Touch outSide
,Next
for go to next input.
First Change TextFiled Return Key
To Next
in StoryBoard.
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)
}
If you don't know current view controller or textview you can use the Responder Chain:
UIApplication.shared.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)
for swift 3-4 i fixed like
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
just copy paste anywhere on the class. This solution just work if you want all UItextfield work as same, or if you have just one!
'programing tip' 카테고리의 다른 글
Android에서 Viewpager 컨트롤러의 속도 저하 (0) | 2020.08.17 |
---|---|
Swift로 현재 언어 코드를 얻는 방법은 무엇입니까? (0) | 2020.08.17 |
객체 지향 프로그래밍에서 "인터페이스"의 정의는 무엇입니까? (0) | 2020.08.17 |
디렉토리의 대소 문자를 변경했는데 Git이 선택하지 않는 것 같습니다. (0) | 2020.08.17 |
ConstraintLayout 내부의 Wrap_content 뷰가 화면 밖으로 확장됩니다. (0) | 2020.08.17 |