键盘遮挡问题解决办法

第一种使用NSNotification,比较麻烦,调用键盘尺寸

从键盘通知中获得键盘尺寸
键盘尺寸存在于NSNotification中。

1;在ViewController中添加keyboardDidShow和keyboardDidHide方法

2;在viewWillAppear中注册UIKeyboardDidshowNotification与UIKeyboardDidHideNotification。

3;在viewWillDisappear中取消对所有事件的订阅注册

4;在ViewController中添加一个Bool成员,跟踪键盘是否可见的状态。


ViewController.h

@interface ViewController : UIViewController{
    BOOL keyboardVisible;
    UIScrollView *scrollView;
}

- (void)keyboardDidShow: (NSNotification*) notif;
- (void)keyboardDidHide: (NSNotification*) notif;

@property (nonatomic, retain) UIScrollView *scrollView;
@end

ViewController.m
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void) keyboardDidShow:(NSNotification *)notif {
//NSLog(@"%@", @"Received UIKeyboardDidShowNotification");
if (keyboardVisible) {
//NSLog(@"%@", @"Keyboard is already visible.  Ignoring notifications.");
return;
}
//NSLog(@"Resizing smaller for keyboard");
// Get the origin of the keyboard when it finishes animating
NSDictionary *info = [notif userInfo];
NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
// Get the top of the keyboard in view's coordinate system.
// We need to set the bottom of the scrollview to line up with it
CGRect keyboardRect = [aValue CGRectValue];
    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];
CGFloat keyboardTop = keyboardRect.origin.y;
// Resize the scroll view to make room for the keyboard
    CGRect viewFrame = self.view.bounds;
viewFrame.size.height = keyboardTop - self.view.bounds.origin.y;
self.scrollView.frame = viewFrame;
keyboardVisible = YES;
}
- (void) keyboardDidHide:(NSNotification *)notif {
//NSLog(@"%@", @"Received UIKeyboardDidHideNotification");
if (!keyboardVisible) {
//NSLog(@"%@", @"Keyboard already hidden.  Ignoring notification.");
return;
}
// The keyboard was visible
//NSLog(@"%@", @"Resizing bigger with no keyboard"); 
// Resize the scroll view back to the full size of our view
self.scrollView.frame = self.view.bounds;
keyboardVisible = NO;
}
- (void)viewDidLoad
{
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
//    scroll.contentSize = CGSizeMake(1000, 1000);
    [self.view addSubview:scrollView];
    UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    //textView.font = [UIFont systemFontOfSize:20];
    [scrollView addSubview:textView];
    [super viewDidLoad];
    [textView release];
    self.scrollView.contentSize = self.view.frame.size;

}

第二种移动view,

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField

中添加

bdimgview.frame = CGRectOffset(bdimgview.frame, 0, -120);
添加移动动画
        [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
        [UIView setAnimationDuration:0.2];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值