实际上我在tableview的第六部分中有textfield,在textview的第11部分有textview。我的问题是当我点击第六部分的texfield时,键盘覆盖了文本字段,同样的事情是发生在textview.for,我使用NSNotificationCenters。 我把代码编写为:
- (无效)viewWillAppear中:(BOOL)动画{
tableView.tableFooterView=nil;
[self reloadView];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:self.view.window];
[tableView reloadData];
}
- (无效)setViewMovedUp:(BOOL)movedUp {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5]; //如果你想向上滑动视图
CGRect rect = mview.frame;
if(movedUp)
{
rect.origin.y = rect.origin.y - kOFFSET_FOR_KEYBOARD;
rect.size.height = rect.size.height + kOFFSET_FOR_KEYBOARD;
}
其他
{
rect.origin.y = rect.origin.y + kOFFSET_FOR_KEYBOARD;
rect.size.height = rect.size.height - kOFFSET_FOR_KEYBOARD;
}
mview.frame = rect;
[UIView commitAnimations];
}
(void)keyboardWillShow:(NSNotification *)notif { // printf(“\ n键盘将显示”); //键盘现在会显示出来。取决于哪个文本字段处于活动状态,向上移动或向下移动视图
if([notesTextView isFirstResponder]&& mview.frame.origin.y> = 0)
{
[self setViewMovedUp:YES];
}
否则if(![notesTextView isFirstResponder]&& mview.frame.origin.y< 0)
{
[self setViewMovedUp:NO];
}
else if([wineryTextField isFirstResponder]&& mview.frame.origin.y> = 0)
{
[self setViewMovedUp:YES];
}
否则if(![wineryTextField isFirstResponder]&& mview.frame.origin.y< 0)
{
[self setViewMovedUp:NO];
}
}
(void)keyboardWillHide:(NSNotification *)notif { // printf(“\ n键盘将隐藏”); //键盘现在会显示出来。取决于哪个文本字段处于活动状态,向上移动或向下移动视图
if([notesTextView isFirstResponder]&& mview.frame.origin.y> = 0) { [self setViewMovedUp:YES]; } 否则if(![notesTextView isFirstResponder]&& mview.frame.origin.y< 0) { [self setViewMovedUp:NO]; }
else if([wineryTextField isFirstResponder]&& mview.frame.origin.y> = 0) { [self setViewMovedUp:YES]; } 否则if(![wineryTextField isFirstResponder]&& mview.frame.origin.y< 0) { [self setViewMovedUp:NO]; }
}
(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)范围 replacementText:(NSString *)文本 { if([text isEqualToString:@“\ n”]){
//event.eventNotes = notesTextView.text;
if(textView==notesTextView)
{
//[self setViewMovedUp:NO];
[textView resignFirstResponder];
}
return NO;
}
返回YES;
}
(BOOL)textFieldShouldReturn:(UITextField *)textField {
if(textField == wineryTextField) { [self setViewMovedUp:NO]; [wineryTextField resignFirstResponder]; } }
以上是我为滚动视图而编写的代码。但问题是有时候当我点击文本字段时它向下滚动而不是向上滚动。同样发生了与textView相关的问题。我导航到另一个控制器并返回并点击eighter texfield或textview。
请为我的问题提供完美的解决方案。
感谢你们所有人......
答案 0 :(得分:0)
您可能需要考虑使用以下UITableView方法:
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath
animated:(BOOL)animated
scrollPosition:(UITableViewScrollPosition)scrollPosition
其中indexPath包含您想要在顶部显示的行,scrollPosition是UITableViewScrollPositionTop。
如果您希望tableview向后滚动,请使用以下UITableView方法保存位于可见屏幕顶部的行。
- (NSArray *)indexPathsForVisibleRows
然后使用上面提到的第一种方法,滚动到已保存的行。