问题描述
|
我在一个自定义表格单元中苦苦挣扎,当它的文本字段成为第一响应者时,我需要将其一直移动到屏幕顶部(而不仅仅是它自动进入的键盘上方的某个位置)。这是因为当用户开始键入文字和键盘之间时,我需要一些空间来放置建议下拉框。
我无法弄清楚如何正确地解决这个问题:(输入将不胜感激...
非常感谢,
斯汀
解决方法
您应该移动整个桌子,而不仅仅是移动单元格。您可以获取单元格的矩形并相应地移动表格。
,UITableView具有执行此操作的方法:moveRowAtIndexPath。 SO上有很多帖子已经介绍了这一点。试试这里
编辑:
您还可以使用表格滚动方法将表格滚动到所需表格的下方一行。
– scrollToRowAtIndexPath:atScrollPosition:animated:
– scrollToNearestSelectedRowAtScrollPosition:animated:
,您可以通过滚动表格来执行此操作,以使包含编辑文本字段的单元格出现在可见表格视图的顶部-看UITableView
中的scrollToRowAtIndexPath:atScrollPosition:animated:
。以UITableViewScrollPositionTop
作为第二个参数调用它以实现该效果。另请参见UITableView文档。例如:
- (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;
}
我在上面的注释中编写了代码,因为它需要设置一些元素,而这完全取决于您。您还必须确保实现适当的逻辑,以隐藏有意义的建议。
我希望这可以为您提供一个可行的解决方案...