iOS UITextField輸入框


參考:https://www.jianshu.com/p/f310fa9459ed   iOS 鍵盤回車鍵(換行、回車符)修改

         https://www.jianshu.com/p/532d12375e9a     iOS中收起鍵盤的幾種方式

      

大體來說,收起鍵盤的方法有:

  • 讓textFiled放棄成為第一響應者(resignFirstResponder)
  • 讓view或者子view強制結束編輯狀態(endEditing)

1.輸入完以后用戶點擊return后收起鍵盤。

可以點擊return收起鍵盤並不意味着彈出來的鍵盤一定都有return這個按鍵,比如數字鍵盤類型就沒有,UIKeyboardTypeWebSearch類型的鍵盤return鍵就變成了Go鍵,需要注意的是這時候的Go鍵相當於return鍵。

要想實現點擊return讓鍵盤收起,首先需要設置textField代理,當然還有遵循UITextFieldDelegate協議:

_textField.delegate = self; 

然后實現協議方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;,當然你也可以在這個方法里 main實現一些需求邏輯,比如判斷輸入的內容符不符合要求等。

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

2.點擊背景后收起鍵盤

點擊背景收起鍵盤可以實現view的- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法,然后執行view的- (BOOL)endEditing:(BOOL)force;方法。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES]; //實現該方法是需要注意view需要是繼承UIControl而來的 } 

還有一些比較笨的方法也可以實現達到點擊背景后收起鍵盤的效果,比如:在背景view上面加手勢,添加UIButton或者view,然后在對應的點擊事件的監聽方法中實現resignFirstResponder或者endEditing

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)]; //設置成NO表示當前控件響應后會傳播到其他控件上,默認為YES。 tapGestureRecognizer.cancelsTouchesInView = NO; //將觸摸事件添加到view上 [self.view addGestureRecognizer:tapGestureRecognizer]; 
-(void)keyboardHide:(UITapGestureRecognizer*)tap{ [textFiled resignFirstResponder]; } 

3.不用view實現endEditing的方法

如果說在比較難獲取viewController的view時,可以使用下面的方法:

[[[UIApplication sharedApplication] keyWindow] endEditing:YES]; 

或者

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];


UITextField 和 UITextView

如圖修改鍵盤

UIReturnKeyDefault

 
UIReturnKeyDefault.jpg

UIReturnKeyGo

 
UIReturnKeyGo.jpg

UIReturnKeyGoogle

 
UIReturnKeyGoogle.jpg

UIReturnKeyJoin

 
UIReturnKeyJoin.jpg

UIReturnKeyNext

 
UIReturnKeyNext.jpg

UIReturnKeyRoute

 
UIReturnKeyRoute.jpg

UIReturnKeySearch

 
UIReturnKeySearch.jpg

UIReturnKeySend

 
UIReturnKeySend.jpg

UIReturnKeyYahoo

 
UIReturnKeyYahoo.jpg

UIReturnKeyDone

 
UIReturnKeyDone.jpg

UIReturnKeyEmergencyCall

 
UIReturnKeyEmergencyCall.jpg

UIReturnKeyContinue

 
UIReturnKeyContinue.jpg

UITextView *textView = [[UITextView alloc] init]; textView.returnKeyType = UIReturnKeyDone; UITextField *textField= [[UITextField alloc] init]; textView.returnKeyType = UIReturnKeyDone; 

對回車符事件進行監聽

實現 UITextViewDelegate代理里面響

  • -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

實現 UITextFieldDelegate代理里面響

  • -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

這個函數的最后一個參數text代表你每次輸入的的那個字,所以:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]){ //判斷輸入的字是否是回車,即按下return //[textView endEditing:YES]; //在這里做你響應return鍵的代碼 return NO; //這里返回NO,就代表return鍵值失效,即頁面上按下return,不會出現換行,如果為yes,則輸入頁面會換行 } return YES; } 
typedef NS_ENUM(NSInteger, UIReturnKeyType) { UIReturnKeyDefault, UIReturnKeyGo, UIReturnKeyGoogle, UIReturnKeyJoin, UIReturnKeyNext, UIReturnKeyRoute, UIReturnKeySearch, UIReturnKeySend, UIReturnKeyYahoo, UIReturnKeyDone, UIReturnKeyEmergencyCall, UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0), };

//
//  Subtitle_I_loveVC.m
//  meiritupian001
//
//  Created by FAMAR-YF-04 on 2020/6/23.
//  Copyright © 2020 FAMAR-YF-04. All rights reserved.
//

#import "Subtitle_I_loveVC.h"
#import "send_Subtitle.h"

@interface Subtitle_I_loveVC ()<UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *input_Sentence;
@property (nonatomic, strong) send_Subtitle *send_SubtitleVC;
@property (nonatomic, weak)NSString *str_input;//輸入的數據
@end

@implementation Subtitle_I_loveVC

-(void)viewWillAppear:(BOOL)animated{

   NSLog(@"視圖即將加入窗口時");
    [super viewDidAppear:animated];
       
       if([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
           
           SEL selector = NSSelectorFromString(@"setOrientation:");
           NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
           [invocation setSelector:selector];
           [invocation setTarget:[UIDevice currentDevice]];
           
           NSInteger val = UIInterfaceOrientationPortrait;//橫屏
           [invocation setArgument:&val atIndex:2];
           [invocation invoke];
           
       }
  
}



- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.input_Sentence.delegate = self;
    self.input_Sentence.returnKeyType = UIReturnKeyDone;//鍵盤類型
}


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

// 點擊空白處收起鍵盤
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.view endEditing:YES]; //實現該方法是需要注意view需要是繼承UIControl而來的
}

- (IBAction)getinputstr:(id)sender {
    
    UITextField *_field = (UITextField *)sender;
    NSLog(@"fhfhff:%@",[_field text]);
    self.str_input = [_field text];
    
}

- (IBAction)pushSend_Subtitle:(id)sender {
    _send_SubtitleVC = [[send_Subtitle alloc]init];
    if(self.input_Sentence.text.length == 0){
        NSLog(@"輸入框輸入為空");
        NSLog(@"輸入框輸入為空:%@",self.input_Sentence.placeholder);
        self.send_SubtitleVC.str_subtitles = self.input_Sentence.placeholder;
    }else{
        NSLog(@"輸入框輸入不為空");
         NSLog(@"輸入框輸入不為空:%@",[self.input_Sentence text] );
        self.send_SubtitleVC.str_subtitles = [self.input_Sentence text];
    }
    [self.navigationController pushViewController:self.send_SubtitleVC animated:NO];
//    [self presentViewController:self.send_SubtitleVC animated:YES completion:nil];
}


@end

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM