UIScrollView中UITextView鍵盤顯示、隱藏的問題

問題1:

由于UITextView作為UIScrollView的子控件,使用常規(guī)的收起鍵盤的方法在這里就會行不通。我嘗試了重寫touchesBegan方法,點擊空白沒響應,因為我實際上點的是scrollView。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
} 

解決方案:

在Scroll View 和 Text View之間添加一層View, 將View的class設置為UIControl, 為其Touch Down事件添加相應方法:
- (IBAction)viewTouchDown:(id)sender {
[self.view endEditing:YES];
}

問題2:

顯示鍵盤的時候,鍵盤會遮擋UITextView, 我想要的效果是,顯示鍵盤的時候,可以通過scrollView的滾動條滾動顯示出整個UITextView。

解決方案:

在顯示和隱藏鍵盤的時候添加監(jiān)聽事件,在監(jiān)聽方法中調(diào)整scrollView的Frame。

- (void)viewWillAppear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardDidHidden:) name:UIKeyboardDidHideNotification object:nil];
}
- (void)keyBoardDidShow:(NSNotification *)notification {
    //獲取鍵盤高度
    NSValue *value = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [value CGRectValue].size;

    CGRect scrollViewFrame = self.scrollView.frame;
    scrollViewFrame.size.height = self.scrollView.bounds.size.height - keyboardSize.height;
    self.scrollView.frame = scrollViewFrame;
}

- (void)keyBoardDidHidden:(NSNotification *)notification {
    //獲取鍵盤高度
    NSValue *value = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGSize keyboardSize = [value CGRectValue].size;

    CGRect scrollViewFrame = self.scrollView.frame;
    scrollViewFrame.size.height = self.scrollView.bounds.size.height + keyboardSize.height;
    self.scrollView.frame = scrollViewFrame;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容