美文网首页iOSView程序员iOS移动开发
UIScrollView中UITextView键盘显示、隐藏的问

UIScrollView中UITextView键盘显示、隐藏的问

作者: alvin_ding | 来源:发表于2015-07-19 21:40 被阅读2287次

问题1:

由于UITextView作为UIScrollView的子控件,使用常规的收起键盘的方法在这里就会行不通。我尝试了重写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。

解决方案:

在显示和隐藏键盘的时候添加监听事件,在监听方法中调整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;
}

相关文章

网友评论

  • 划水:感谢楼主!问题1困扰我好久了,终于找到答案了~~但是能不能不加额外的view实现收起键盘的功能呢?多加个view会不会影响性能,增加内存什么的?
    alvin_ding:@划水 现在好多是- scrollViewDidScroll:的时候收起键盘,你可以试试。

本文标题:UIScrollView中UITextView键盘显示、隐藏的问

本文链接:https://www.haomeiwen.com/subject/ygspqttx.html