始终将自定义表格单元格反弹到顶部

问题描述

| 我在一个自定义表格单元中苦苦挣扎,当它的文本字段成为第一响应者时,我需要将其一直移动到屏幕顶部(而不仅仅是它自动进入的键盘上方的某个位置)。这是因为当用户开始键入文字键盘之间时,我需要一些空间来放置建议下拉框。 我无法弄清楚如何正确地解决这个问题:(输入将不胜感激... 非常感谢, 斯汀     

解决方法

您应该移动整个桌子,而不仅仅是移动单元格。您可以获取单元格的矩形并相应地移动表格。     ,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;
}
我在上面的注释中编写了代码,因为它需要设置一些元素,而这完全取决于您。您还必须确保实现适当的逻辑,以隐藏有意义的建议。 我希望这可以为您提供一个可行的解决方案...     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...