iOS.UIKit.05.UIScrollView

1、案例介紹:利用UIScrollView, 避免鍵盤遮擋控件;圖0一、圖02實際上是存在第三個UIButton的,滑動屏幕能夠看到,如圖06。效果如圖01,圖02。app

圖01圖02圖03圖06ide

2、案例步驟:atom

一、選擇Single View Application新建項目,取名cq.30.ScrollView,如圖03。spa

二、Main.storyboard如圖04,圖05。code

圖04圖05server

三、CQ30ViewController.hblog

#import <UIKit/UIKit.h>

@interface CQ30ViewController : UIViewController<UITextFieldDelegate>
{
    BOOL keyboardVisible;   //鍵盤出現標識
}
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end

四、CQ30ViewController.mrem

》經過UITextFieldDelegate實現對UITextField放棄第一響應者身份,關閉鍵盤it

#pragma mark -- UITextFieldDelegate method
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

》註冊監聽鍵盤打開與關閉通知io

-(void) viewWillAppear:(BOOL)animated {
    
    //註冊鍵盤出現通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidShow:)
                                                 name: UIKeyboardDidShowNotification object:nil];
    //註冊鍵盤隱藏通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidHide:)
                                                 name: UIKeyboardDidHideNotification object:nil];
    [super viewWillAppear:animated];
}


-(void) viewWillDisappear:(BOOL)animated {
    //解除鍵盤出現通知
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name: UIKeyboardDidShowNotification object:nil];
    //解除鍵盤隱藏通知
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name: UIKeyboardDidHideNotification object:nil];
    
    [super viewWillDisappear:animated];
}

》經過監聽鍵盤的打開與關閉動態改變UIScrollView的frame,聚焦當前UITextField。

-(void) keyboardDidShow: (NSNotification *)notif {
    
    if (keyboardVisible) {//鍵盤已經出現要忽略通知
        return;
    }
    // 得到鍵盤尺寸
    NSDictionary* info = [notif userInfo];
    NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;
    
    //從新定義ScrollView的尺寸
    CGRect viewFrame = self.scrollView.frame;
    viewFrame.size.height -= (keyboardSize.height);
    self.scrollView.frame = viewFrame;
    
    //滾動到當前文本框
    CGRect textFieldRect = [self.textField frame];
    [self.scrollView scrollRectToVisible:textFieldRect animated:YES];
    
    keyboardVisible = YES;
}

-(void) keyboardDidHide: (NSNotification *)notif {
    
    NSDictionary* info = [notif userInfo];
    NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;
    
    CGRect viewFrame = self.scrollView.frame;
    viewFrame.size.height += keyboardSize.height;
    self.scrollView.frame = viewFrame;
    
    if (!keyboardVisible) {
        return;
    }
    
    keyboardVisible = NO;
    
}
相關文章
相關標籤/搜索