你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發TextField根據鍵盤自適應位置

iOS開發TextField根據鍵盤自適應位置

編輯:IOS開發綜合
- (void)setNotification {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
- (void)closeNotification
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
}

- (void)keyboardWillChangeFrame:(NSNotification *)notification {
    
    NSDictionary *dict = [notification userInfo];
    // 鍵盤彈出和收回的時間
    CGFloat duration = [[dict objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    // 鍵盤初始時刻的frame
    CGRect beginKeyboardRect = [[dict objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    // 鍵盤停止後的frame
    CGRect endKeyboardRect = [[dict objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    // 相減為鍵盤高度
    CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;
    
    // 創建appDelegate單例對象
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    // 初始化一個數組,UIWindow的所有子視圖
    NSArray *array = appDelegate.window.subviews;
    // 獲取當前Controller的view視圖
    UIView *view = appDelegate.window.subviews[array.count - 1];
    // textField相對於UIWindow的frame
    CGRect selfFrameFromUIWindow = [self convertRect:self.bounds toView:appDelegate.window];
    // textField底部距離屏幕底部的距離
    CGFloat bottomHeight = [UIScreen mainScreen].bounds.size.height - selfFrameFromUIWindow.origin.y - selfFrameFromUIWindow.size.height;
    
    
    // 初始化一個frame,大小為UIWindow的frame
    CGRect windowFrame = appDelegate.window.frame;
    // 把這個frame的y值增加或減少相應的高度(這裡的40是textField底部和鍵盤頂部的距離)
    windowFrame.origin.y += yOffset + bottomHeight - 40;
    // 根據yOffset判斷鍵盤是彈出還是收回
    if (yOffset < 0) {
        // 鍵盤彈出,改變當前Controller的view的frame
        [UIView animateWithDuration:duration animations:^{
            view.frame = windowFrame;
        }];
    } else {
        // 鍵盤收回,把view的frame恢復原狀
        [UIView animateWithDuration:duration animations:^{
            view.frame = appDelegate.window.frame;
        }];
    }
}

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved