首页澳门新葡亰官方网站 › 键盘的出现于藏身(消除键盘弹出时会覆盖文本框的标题,代码完毕卡塔尔国,键盘文本框

键盘的出现于藏身(消除键盘弹出时会覆盖文本框的标题,代码完毕卡塔尔国,键盘文本框

键盘的出现于隐藏(解决键盘弹出时会覆盖文本框的问题,代码实现),键盘文本框

键盘的出现于隐藏(解决键盘弹出时会覆盖文本框的问题,代码实现)

 

#import "ViewController.h"

#import "UIView+FrameExtension.h" // 可以自己写,以后用着方便

#define kDeviceHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    

    // 设置视图的背景色

    self.view.backgroundColor = [UIColor lightGrayColor];

    

    // 添加第一个文本框 假定位置

    UITextField *firstField = [[UITextField
alloc]initWithFrame:CGRectMake(50, 300, 200, 40)];

    firstField.backgroundColor = [UIColor whiteColor];

    [self.view addSubview:firstField];

    

    // 添加第一个文本框

    UITextField *secondField = [[UITextField
alloc]initWithFrame:CGRectMake(firstField.x, firstField.bottom + 50,
firstField.width , firstField.height)];

    [self.view addSubview:secondField];

    secondField.backgroundColor = [UIColor whiteColor];

    

    // 注册键盘显示的通知

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

    // 注册键盘隐藏的通知

    [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(hideKeyboard: ) name:UIKeyboardWillHideNotification
object:nil];

}

 

// 键盘弹出时执行这个方法,

-(void)showKeyboard:(NSNotification *)notification{

    

    // 定义一个文本框,指向正在编辑的文本框,也就是弹出键盘的文本框

    UITextField *txtField;

    // 今次遍历当前视图的所有子视图,
subViews数组保存的是当前视图所有的子视图

    for (UIView *subView in self.view.subviews) {

        //
如果这个子视图是一个文本框的话,isKindOfClass方法可以判断某个变量是不是某个类型的变量

        if ([subView isKindOfClass:[UITextField class]]) {

            // 先把这个子视图转化为文本框

            UITextField *tempField = (UITextField *)subView;

            // 再判断这个文本框是不是正在编辑

            if (tempField.isEditing ) {

                // 如果这个文本框正在编辑,就是我要找的文本框,中断循环

                txtField = tempField;

                break;

            }

        }

    }

    

    NSLog(@"%@", notification);

    // 获取通知的userInfo属性

    NSDictionary *userInfoDict = notification.userInfo;

    // 通过键盘通知的userInfo属性获取键盘的bounds

    NSValue *value = [userInfoDict
objectForKey:UIKeyboardBoundsUserInfoKey];

    // 键盘的大小

    CGSize keyboardSize = [value CGRectValue].size;

    // 键盘高度

    CGFloat keyboardHeight = keyboardSize.height;

    

    CGFloat offset = kDeviceHeight - keyboardHeight - txtField.bottom ;

    

    if (offset < 0 ) {      //这种情况下需要上移

        offset = offset - 10 ;     //保存上移的高度

        

        [UIView animateWithDuration:0.5 animations:^{

            

            self.view.transform = CGAffineTransformMakeTranslation(0,
offset );

        }];

    }

    

}

 

-(void)hideKeyboard:(NSNotification *)notification{

    

    [UIView animateWithDuration:2 animations:^{

        

        self.view.transform = CGAffineTransformIdentity;

    }];

    

}

   // 点击屏幕空白时隐藏键盘

-(void)touchesBegan:(NSSet<UITouch *> *)touches
withEvent:(UIEvent *)event{

    [self.view endEditing:YES];

}

@end

 

图片 1

图片 2

图片 3

 源文件可以在这里下载,希望可以帮到你:

键盘的出现于隐藏(解决键盘弹出时会覆盖文本框的问...

CGRect keyBoardBounds  = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];  

{  

if (animationTime > 0) {  

[keyBoardTopView addSubview:inputTF];  

CGFloat keyBoardHeight = keyBoardBounds.size.height;  

inputTF.layer.cornerRadius = 5;  

- (void)keyBoardWillShow:(NSNotification *)notification  


UIView *keyBoardTopView = [[UIView alloc] initWithFrame:CGRectMake(0, HZKScreenH, HZKScreenW, 50)];  

self.commentView.transform = CGAffineTransformIdentity;  

// 获取键盘高度  

//发布按钮  

注意:

在使用键盘监听的控制器中,如果项目中有用到IQKeyboardManager,一定要在当前控制器,重新设置这个第三方库为不可用,不然弹出键盘后,你的自定义视图会便宜两个键盘高度的位置.原因是系统的监听和IQKeyboardManager的监听冲突了...

keyBoardTopView.backgroundColor = [UIColor whiteColor];  

inputTF.placeholder = @"请输入评论";  

inputTF.frame = CGRectMake(10, 4, HZKScreenW - 10 - 72, 42);  

if (animationTime > 0) {  

所以我放弃了这种方法.

[UIView animateWithDuration:animationTime animations:animation];  

[self.sendBtn setTitle:@"发布" forState:UIControlStateNormal];  

最近公司项目需要实现一个类似微信朋友圈的点击某个按钮,弹出键盘和一个自定义的辅助视图,包括输入框和按钮.

CGFloat animationTime  = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];  

        animation();  

}  

    }  

void (^animation)(void) = ^void(void) {  

// 获取键盘动画时间  

[keyBoardTopView addSubview:self.sendBtn];  


        animation();  

keyBoardTopView.layer.borderWidth = 0.7;  

keyBoardTopView.layer.borderColor = HZKColor(204, 204, 204).CGColor;  

    };  

[self.sendBtn addTarget:self action:@selector(dismissKeyboard:) forControlEvents:UIControlEventTouchUpInside];  

1.当时自己的第一个想法,就是先创建一个屏幕外的大小为(1,1)的UITextField,通过点击按钮,使这个textFiled成为第一响应者,从而弹出键盘.那么问题来了,弹出键盘是容易,但是如何实现自定义视图,不用担心,系统的UITextfield和UITextView都可以设置一个inputAccessoryView(就是键盘上方的视图).很简单,这就实现了需要完成的功能.结果,因为当前页面出现两个输入框,对于成为第一响应者,或者取消成为第一响应者有比较大的问题,导致在某些输入法带有收起键盘的按钮失效,还有会出现,键盘上方视图,每次点击都会切换frame的bug.(原因未明) 

    } }  

}else {  

// 获取用户信息  

转载本站文章请注明出处:澳门新葡亰官方网站 http://www.radioritmo-bl.com/?p=492

上一篇:

下一篇:

相关文章