一些背景知识
我正在使用UITableViewController
子类来获取不同类型单元格的长列表。从技术上讲,这通常不适用于UITableViewController
或UITableView
。但是,我正在使用LARGE遗留代码库 - 重构这不是一个选项。
其中一个单元格,让我们调用ProductListCell
由多个视图组成(实际上每个视图应该是一个单元格,但同样是LARGE遗留代码库),这些视图以编程方式组合在一起。
视图,让我们在nib上绘制调用ProductListView
,但是当ProductListCell
中提供了单元格数据时,cellForRowAtIndexPath:
中的约束会以编程方式对其进行打包。这些ProductListView
中的每一个都有一个UITextField
。因此,此UITextFields
中有多个ProductListCell
。
问题: 有时候,并非总是如此,当点击文本字段并出现键盘时,文本字段会被推出视图。
我已经尝试将文本字段从ProductListView
,超级视图单元格传递到UITableViewController
子类,然后观察键盘出现,然后scrollToRectVisible:
到文本字段。我已经和[self.tableView convertPoint:fromView:];
一起完成了。
我确实认为,因为此UITableViewController
中多个单元格的高度未定义,但基于提供给它们的数据是动态的,它与默认键盘外观滚动行为混淆。
有人遇到过类似问题吗?
编辑:我应该提到 - 我的猜测是UITableViewController
知道如何在单元格中显示文本字段。但是当一个单元格中有多个文本字段时,我相信它只关注单元格,而不是特别是文本字段。
答案 0 :(得分:0)
动态内容不应该 问题。作为键盘,它的高度是固定的。你只需要抓住现在显示键盘的区域。注册keyboardNotifications并尝试这可能会有所帮助。
import React from 'react';
import { Router, Link } from 'react-router';
export default class ResourceCard extends React.Component {
constructor(props, context) {
super(props, context);
}
render() {
return (
<div onClick={this.routeHandler.bind(this)}>
LINK
</div>
);
}
routeHandler(){
this.context.router.transitionTo('someRoute', {objectId: 'asdf'})
}
}
ResourceCard.contextTypes = {
router: function contextType() {
return React.PropTypes.func.isRequired;
}
};
答案 1 :(得分:0)
以下代码将您的文本字段保留在视图的顶部。
您可以在UITextField
的委托方法textFieldDidBeginEditing
CGRect frame = CGRectZero;
frame.origin.x = 0;
frame.origin.y = textField.tag*ROW_HEIGHT+textField.frame.origin.y+textField.frame.size.height*2+5;
frame.size.width = self.view.frame.size.width;
frame.size.height = RESULTS_TABLE_HEIGHT;
[self.tableView setContentOffset:CGPointMake(0, frame.origin.y-30)animated:YES];
// 30:tableview单元格中的文本字段高度