Objective-C IOS UITextField输入框下键盘显示

今天学习ios oc 开发,发现输入框不能跟随键盘变化,通过查找资料终于解决了这个问题,具体代码如下

代码如下

前提设置

//

//  AppDelegate.h

//  uesjpad

//

//  Created by jiangfengcheng on 2022/3/12.

//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (nonatomic,strong) UIWindow *window;

@end

设置如下

//

//  ViewController.m

//  uesjpad

//

//  Created by jiangfengcheng on 2022/3/12.

//

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutletUITextField *username;

@property (weak, nonatomic) IBOutletUITextField *password;

@end

@implementationViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.username.placeholder=@"请输入用户名";

    self.password.placeholder=@"请输入密码";

    //设置密码显示

    self.password.secureTextEntry = YES;

    //方法1 通过代理来完成键盘回收

    

    //添加键盘监听事件

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yjd_keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

}

// 输入控件键盘高度

- (void)yjd_keyboardWillShow🙁NSNotification *)notifi

{

    //获取键盘的高度

    NSDictionary *userInfo = [notifi userInfo];

    NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];

    CGFloat keyboardHeight = [aValue CGRectValue].size.height;//键盘的高度

    //获取键盘动画时间

    CGFloat time = [notifi.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    //获取当前第一响应状态的输入框

    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

    UIView *view = [keyWindow performSelector:@selector(firstResponder)];

    //输入框在当前屏幕的坐标y

    CGFloat maxY =  CGRectGetMaxY([view convertRect:view.bounds toView:[[[UIApplication sharedApplication] delegate] window]]);

    //判断是非遮挡当前输入框,小于0遮挡,大于或等于0没有

    CGFloat map = [UIScreen mainScreen].bounds.size.height  - maxY - keyboardHeight;

    NSLog(@"map = %f", map);

    if (map < 0) {

        [UIView animateWithDuration:time animations:^{

            self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, map);

        }];

    }

}

//点击键盘return

- (BOOL)textFieldShouldReturn🙁UITextField *)textField {

    if (textField.returnKeyType == UIReturnKeyNext) {

        NSLog(@"textFieldShouldReturn");

        UITextField *nextTextField = (UITextField *)[self.view viewWithTag:textField.tag + 1];

        [textField endEditing:YES];

        [nextTextField becomeFirstResponder];

    } else {

        NSLog(@"textFieldShouldReturn===transform");

        [self endEdit];

    }

    returnYES;

}

//隐藏键盘

- (void)endEdit {

    [self.view endEditing:YES];

    self.view.transform = CGAffineTransformIdentity;

}

//点击其他位置隐藏键盘

- (void)touchesEnded🙁NSSet<UITouch *> *)touches withEvent🙁UIEvent *)event

{

    [self endEdit];

}

- (void)dealloc

{

    //移除通知

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

}

//初始化UITextField

- (void)initTextField🙁UITextField *)textField leftImage🙁UIImage *)leftImage{

    //设置边框

    textField.layer.borderColor = [UIColor grayColor].CGColor;

    textField.layer.borderWidth = 1.0;

    textField.layer.cornerRadius = 10;

    //设置内边距、paddingTop、paddingLeft、paddingBottom、paddingRight

//    [textField setValue:[NSNumber numberWithInt:20] forKey:@"paddingLeft"];

   

    UIView *leftView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];

    

    //设置左侧“返回”

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 8, 25, 24)];

    imageView.image =leftImage;

    [leftView addSubview:imageView];

    textField.leftView = leftView;

    

    //设置显示模式

    textField.leftViewMode = UITextFieldViewModeAlways;

    textField.clearButtonMode = UITextFieldViewModeWhileEditing;

    //设置代理

    textField.delegate = self;

}

@end

Objective-C IOS UITextField输入框下键盘显示-上流阁

*文章为作者独立观点,不代表上流阁立场
本文由 江风成 授权 上流阁 发表,并经上流阁编辑。转载此文章须经作者同意,并请附上出处(上流阁)及本页链接。原文链接https://www.o6c.com/ios/2022/03/13/1520.html
发表评论

坐等沙发
相关文章
Objective-C IOS UITextField的各种属性设置
Objective-C IOS UITextField的各种属性…
Objective-C IOS  JSON序列化,以及NSdata、NSString、NSDictionay之间的转换
Objective-C IOS JSON序列化,以及NSda…
Objective-C IOS  预处理 宏 #define
Objective-C IOS 预处理 宏 #define
MacBook MAC系统显示隐藏文件和.点开头文件方法
MacBook MAC系统显示隐藏文件和.点开头…
IOS开发wkwebview与HTML页面JS互相交互的干货
IOS开发wkwebview与HTML页面JS互相交互…
javaweb开发程序员php开发,微信开发。接受定制开发

最新评论