iphone - uitextfield鍵盤 - uitextfield width
在編輯UITextField時如何解除鍵盤 (14)
我知道,當我想放棄鍵盤時,我需要告訴我的UITextField退出第一響應者,但我不知道如何知道用戶何時按下了鍵盤上的“完成”鍵。 有沒有我可以觀察的通知?
Swift 3,iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
kubi,謝謝。 你的代碼工作。 正如你所說的,你必須將UITextField
的delegate
設置為與文本字段所在的ViewController相同。 你可以隨心所欲地做到這一點。 我選擇了viewDidLoad
方法。
- (void)viewDidLoad
{
// sets the textField delegates to equal this viewController ... this allows for the keyboard to disappear after pressing done
daTextField.delegate = self;
}
以下是我必須做的工作,我認為對於任何使用數字鍵盤的人來說,鍵盤(或其他沒有完成按鈕的人)都是必需的:
- 我將ViewController中的UIView更改為UIControl。
我創建了一個叫做的函數
-(IBAction)backgroundIsTapped:(id)sender
這也是在.h文件中定義的。
在此之後,我鏈接到了Interface Builder中ViewController的'touch down'位。
在'背景是挖掘'的功能,我把這個:
[answerField resignFirstResponder];
只要記住要將'answerField'改為你想從中移除鍵盤的UITextField的名字(顯然要確保你的UITextField被定義為如下:)
IBOutlet UITextField * <nameoftextfieldhere>;
我知道這個話題很可能在很久以前就去世了......但我希望這會幫助別人!
以編程方式在swift 3中設置UITextField的委託
在ViewController.Swift文件中實現UITextFieldDelegate(例如類ViewController:UIViewController,UITextFieldDelegate {)
lazy var firstNameTF: UITextField = {
let firstname = UITextField()
firstname.placeholder = "FirstName"
firstname.frame = CGRect(x:38, y: 100, width: 244, height: 30)
firstname.textAlignment = .center
firstname.borderStyle = UITextBorderStyle.roundedRect
firstname.keyboardType = UIKeyboardType.default
firstname.delegate = self
return firstname
}()
lazy var lastNameTF: UITextField = {
let lastname = UITextField()
lastname.placeholder = "LastName"
lastname.frame = CGRect(x:38, y: 150, width: 244, height: 30)
lastname.textAlignment = .center
lastname.borderStyle = UITextBorderStyle.roundedRect
lastname.keyboardType = UIKeyboardType.default
lastname.delegate = self
return lastname
}()
lazy var emailIdTF: UITextField = {
let emailid = UITextField()
emailid.placeholder = "EmailId"
emailid.frame = CGRect(x:38, y: 200, width: 244, height: 30)
emailid.textAlignment = .center
emailid.borderStyle = UITextBorderStyle.roundedRect
emailid.keyboardType = UIKeyboardType.default
emailid.delegate = self
return emailid
}()
//標記: - 處理委託textField ..
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == firstNameTF {
lastNameTF.becomeFirstResponder()
}
else if textField == lastNameTF {
emailIdTF.becomeFirstResponder()
}
else {
view.emailIdTF(true)
}
return true
}
你也可以使用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.yourTextField resignFirstResponder];
}
最好的一個,如果你有很多Uitextfields:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
創建一個功能hidekeyboard並將其鏈接到.xib文件中的文本字段並選擇DidEndOnExit
-(IBAction)Hidekeyboard
{
textfield_name.resignFirstResponder;
}
嘗試這個
- (BOOL) textView: (UITextView*) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString*) text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
在Swift中,您可以在Controller中編寫一個IBAction,並將該文本字段的Did End On事件設置為該操作
@IBAction func returnPressed(sender: UITextField) {
self.view.endEditing(true)
}
如果您使用Interface Builder創建了視圖,請使用以下方法創建一個方法,
-(IBAction)dismissKeyboard:(id)sender
{
[sender resignFirstResponder];
}
只需右鍵單擊視圖中的文本字段,並將該事件設置為在退出時結束,並將其連接到方法“dismissKeyboard”。
對於初學者來說,最好的指南是“Head First iPhone和iPad開發,第二版”
如果您將文本字段的DidEndOnExit事件連接到InterfaceBuilder中的操作(IBAction),那麼當用戶解除鍵盤(使用返回鍵)並且發件人將成為引發事件的UITextField的引用時,它將被消息傳遞。
例如:
-(IBAction)userDoneEnteringText:(id)sender
{
UITextField theField = (UITextField*)sender;
// do whatever you want with this text field
}
然後,在InterfaceBuilder中,將文本字段的DidEndOnExit事件鏈接到您的控制器上的此操作(或用於鏈接UI中事件的任何內容)。 每當用戶輸入文本並退出文本字段時,控制器將發送此消息。
您會注意到,“textFieldShouldReturn”方法提供了已經擊中DONE鍵的文本字段對象。 如果您設置標籤,您可以打開該文本字段。 或者,您可以跟踪並比較對象的指針與其創建者存儲的某個成員值。
我的方法就是這樣的自學:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
bool fDidResign = [textField resignFirstResponder];
NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");
return fDidResign;
}
同時,我提出了拒絕辭職的“驗證”測試。 它僅用於說明,所以如果用戶輸入NO! 進入領域,它不會解僱。 行為是我想要的,但是輸出的順序並不像我預期的那樣。
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
if( [[textField text] isEqualToString:@"NO!"] ) {
NSLog(@"%@", textField.text);
return NO;
} else {
return YES;
}
}
以下是我的NSLog輸出用於拒絕接受接受。 您會注意到我正在返回辭職結果,但我希望它返回FALSE給我,以便向調用者報告?! 除此之外,它具有必要的行為。
13.313 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:] 13.320 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldEndEditing:] 13.327 StudyKbd[109:207] NO! 13.333 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]: did resign the keyboard 59.891 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:] 59.897 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldEndEditing:] 59.917 StudyKbd[109:207] -[StudyKbdViewController doneEditText]: NO 59.928 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]: did resign the keyboard
這裡有一個竅門,就是在沒有代碼的情況下獲得自動鍵盤解除行為。 在筆尖中,編輯身份檢查器中的First Responder代理對象,添加新的第一響應者操作; 我們叫它dummy:
。 現在,將文本字段的退出時結束事件掛接到First Responder代理對象的dummy:
action。 而已! 由於文本字段的退出結束事件現在具有動作 - 目標對,當用戶點擊返回時,文本字段會自動關閉其鍵盤; 並且由於沒有為響應者鏈中發送的消息找到處理程序而不受懲罰,即使沒有dummy:
實現dummy:
任何位置,應用程序也不會崩潰。
//====================================================
// textFieldShouldReturn:
//====================================================
-(BOOL) textFieldShouldReturn:(UITextField*) textField {
[textField resignFirstResponder];
if(textField.returnKeyType != UIReturnKeyDone){
[[textField.superview viewWithTag: self.nextTextField] becomeFirstResponder];
}
return YES;
}
textField.returnKeyType = UIReturnKeyDone;