弹跳自定义表格单元格一直到顶部

时间:2011-05-24 12:20:27

标签: iphone objective-c cocoa-touch

我正在努力使用自定义表格单元格,当文本字段成为第一响应者时,我需要一直移动到屏幕顶部(不仅仅是键盘上方自动进入的位置)。这是因为当用户开始输入时,我需要在文本字段和键盘之间留出一些建议下拉框的空间。

我无法弄清楚如何正确地解决这个问题:(非常感谢输入...

非常感谢,
斯坦

3 个答案:

答案 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;
}

我在评论中编写了上面的代码,因为它需要设置一些元素,这完全取决于你。您还必须确保在有意义的时候实施适当的逻辑来隐藏建议下拉。

我希望这能指引你找到一个有效的解决方案......