Ios 所选tableviewCell为';键盘出现后t完全显示

Ios 所选tableviewCell为';键盘出现后t完全显示,ios,uitableview,uitextview,Ios,Uitableview,Uitextview,我在自定义UITableViewCell中有一个UiTextView。当我选择文本视图时,键盘出现 但有时会出现奇怪的行为: 键盘出现后,选定的tableviewCell未完全显示。有什么想法吗?我花了2天时间解决这个问题,请帮助。当显示键盘时,您可以向上移动视图 //Add to viewDidLoad [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) na

我在自定义UITableViewCell中有一个UiTextView。当我选择文本视图时,键盘出现

但有时会出现奇怪的行为:


键盘出现后,选定的tableviewCell未完全显示。有什么想法吗?我花了2天时间解决这个问题,请帮助。

当显示键盘时,您可以向上移动视图

//Add to viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardWillHideNotification object:nil];

//Add to View Controller

//Pushes the view up if one of the table forms is selected for editing
- (void) keyboardDidShow:(NSNotification *)aNotification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.25];
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount);
    [UIView commitAnimations];
    isRaised = [NSNumber numberWithBool:YES];
}

//Pushes view back down
- (void) keyboardDidHide:(NSNotification *)aNotification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.25];
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y+moveAmount);
    [UIView commitAnimations];
    isRaised = [NSNumber numberWithBool:NO];
}

总之,我通过观察tableView.ContentOffset值解决了这个问题

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (_isScrollingDownLocked) {
        CGPoint newPoint = (CGPoint)[[change valueForKey:NSKeyValueChangeNewKey ] CGPointValue];
        CGPoint oldPoint = (CGPoint)[[change objectForKey:NSKeyValueChangeOldKey] CGPointValue];
        if (newPoint.y<oldPoint.y) {
            CGPoint point = CGPointMake(oldPoint.x, oldPoint.y);
            [self removeObserver:self forKeyPath:@"self.tableView.contentOffset"];
            self.tableView.contentOffset = point;
            [self addObserver:self forKeyPath:@"self.tableView.contentOffset"    options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
        }
    }
}
-(void)observeValueForKeyPath:(NSString*)对象的键路径:(id)对象更改:(NSDictionary*)更改上下文:(void*)上下文
{
如果(_IsCrollingDownLocked){
CGPoint newPoint=(CGPoint)[[change valueForKey:NSKeyValueChangeNewKey]CGPointValue];
CGPoint oldPoint=(CGPoint)[[change objectForKey:NSKeyValueChangeOldKey]CGPointValue];

如果(newPoint.yKeyboard在正确的位置向上移动,有时tableview会向下移动一点。我不应该将其向上移动,因为它看起来很奇怪。我需要在它到达正确的位置后取消uitextview向下移动。使用scrollToRowAtIndexPath:atScrollPosition:animated:或scrollEnabled=NOi使用的scrollToRowAtIndexPath:AtScrollPositeion:UITableViewScrollPositionBottom动画:延迟一段时间后。谢谢!