我正在努力使用自定义表格单元格,当文本字段成为第一响应者时,我需要一直移动到屏幕顶部(不仅仅是键盘上方自动进入的位置)。这是因为当用户开始输入时,我需要在文本字段和键盘之间留出一些建议下拉框的空间。
我无法弄清楚如何正确地解决这个问题:(非常感谢输入...
非常感谢,
斯坦
答案 0 :(得分:0)
你应该移动整个表格,而不仅仅是单元格。您可以获取单元格的矩形并相应地移动表格。
答案 1 :(得分:0)
UITableView有以下方法:moveRowAtIndexPath。 SO上有很多帖子已经涵盖了这一点。试试here。
编辑: 您还可以使用表格滚动方法将表格滚动到所需的表格下方的行。
– scrollToRowAtIndexPath:atScrollPosition:animated:
– scrollToNearestSelectedRowAtScrollPosition:animated:
答案 2 :(得分:0)
您可以通过滚动表格来执行此操作,以便包含编辑文本字段的单元格显示在可见表格视图的顶部 - 请查看scrollToRowAtIndexPath:atScrollPosition:animated:
中的UITableView
。使用UITableViewScrollPositionTop
作为第二个参数调用它以实现该效果。另请参阅UITableView documentation。例如:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
// quick and dirty way to obtain a reference to the cell containing the textField
UITableViewCell *cell = (UITableViewCell *)textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
然后,您可以将“建议下拉框”添加为顶级视图的子视图,使其显示在tableView上方并相应地进行定位。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// assuming |suggestionBox| is a property owned by your controller
if (![suggestionBox superview]) {
// Set-up the suggestion box view here; have your controller retain it.
// self.suggestionBox = [[UIView alloc] initWithFrame: ...];
// ...
// [self.view addSubview:suggestionBox];
}
// Update the content of the suggestion box using the replacement string, e.g.:
// NSArray *suggestions = [self suggestionsWithString:string];
// [self.suggestionBox setSuggestions:suggestions];
return YES;
}
我在评论中编写了上面的代码,因为它需要设置一些元素,这完全取决于你。您还必须确保在有意义的时候实施适当的逻辑来隐藏建议下拉。
我希望这能指引你找到一个有效的解决方案......