나는 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;
}