iphone - uitextfield鍵盤 - uitextfield width




在編輯UITextField時如何解除鍵盤 (14)

我知道,當我想放棄鍵盤時,我需要告訴我的UITextField退出第一響應者,但我不知道如何知道用戶何時按下了鍵盤上的“完成”鍵。 有沒有我可以觀察的通知?


Swift 3,iOS 9+

@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}


kubi,謝謝。 你的代碼工作。 正如你所說的,你必須將UITextFielddelegate設置為與文本字段所在的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;
}

以下是我必須做的工作,我認為對於任何使用數字鍵盤的人來說,鍵盤(或其他沒有完成按鈕的人)都是必需的:

  1. 我將ViewController中的UIView更改為UIControl。
  2. 我創建了一個叫做的函數

    -(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;






uitextfield