【发布时间】:2017-10-22 23:28:48
【问题描述】:
我已经尝试过 StackOverflow 上的大部分示例。我也用过苹果的。我似乎遇到的问题是他们没有考虑 UITextField 在 UITableView 中。我已经多次这样做了,但不是这样。我有一个自定义的 UITableViewCell,里面有一个 UITextField。
在我的 UITableView(不是 UITableViewController)上,我需要能够避免将 UITextField 隐藏在 UITableView 下。
我现在有这个:
-(void)viewDidLoad
{
....
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
....
}
- (void)scrollToRectOfTextField {
UITableViewCell *cell = (UITableViewCell*)[self.activeTextField superview];
CGRect r = CGRectMake(self.activeTextField.frame.origin.x,
cell.frame.origin.y+self.activeTextField.frame.origin.y,
self.activeTextField.frame.size.width,
self.activeTextField.frame.size.height);
[self.tableView scrollRectToVisible:r animated:YES];
}
- (void)keyboardDidShow:(NSNotification *)notification
{
if (UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone) {
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
NSLog(@"TableView: %@", NSStringFromCGRect(self.tableView.frame));
CGRect newTableViewFrame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width, self.tableView.frame.size.height - size.height);
self.tableView.frame = newTableViewFrame;
NSLog(@"New TableView: %@", NSStringFromCGRect(self.tableView.frame));
self.tableView.contentSize = CGSizeMake(self.tableView.contentSize.width, self.tableView.contentSize.height-size.height);
}
}
- (void)keyboardWillHide:(NSNotification *)notification
{
NSDictionary *userInfo = [notification userInfo];
CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,
self.tableView.frame.origin.y,
self.tableView.frame.size.width,
self.tableView.frame.size.height + size.height);
NSLog(@"%@", NSStringFromCGRect(self.tableView.frame));
}
-(void)textFieldDidBeginEditing
{
[self scrollToRectOfTextField];
}
这似乎在我的键盘上推了一堆空白。另请注意,我的 UITextField 上也有一个 inputAccessoryView。
哦,我不能使用任何第三方类。我喜欢 TPKeyboardAvoidingScrollView,但我不能使用任何第三方。
【问题讨论】:
-
什么时候打电话给
[self scrollToRectOfTextField];? -
另外,如果您为 tableview 的底部边缘插入动画而不是尝试更改框架,您将获得更流畅的动画。
-
这是个好问题。在我从中提取的示例中没有使用它。
-
我编辑了它。它在 textFieldDidBeginEditing 中被调用。
-
应该是
- (void)textFieldDidBeginEditing:(UITextField *)textField- 你有没有在那里设置断点来查看它是否被调用?