カスタムUITableViewCell内にUiTextViewがあります。テキストビューを選択すると、キーボードが表示されます。
しかし、時々奇妙な振る舞いが起こります:
キーボードが表示された後、選択したtableviewCellが完全に表示されません。何か案は?私はこの問題を解決するために2日を費やしました。助けてください。
カスタム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];
}
}
}