我在UITableViewCell中有一个TextView.TextView中的文本可以在那里进行编辑.
TextView根据文本包含的行数垂直增长和缩小.到目前为止,我还没有发现让包含TextView的行动态增长和缩小的可能性.
[tableView reloadData];
Run Code Online (Sandbox Code Playgroud)
要么
[tableView reloadRowsAtIndexPaths: withRowAnimation:];
Run Code Online (Sandbox Code Playgroud)
不起作用,因为他们在每次更改时都会关闭键盘.
有没有办法在不解除键盘的情况下更改UITableView中单个行的高度?
我添加了一个UITextField作为a的子视图UITableViewCell.然后我添加了一个target,selector以便我知道什么时候UIControlEventEditingChanged.这很好用,但我想知道它所在indexPath的单元格UITextField,因为它可以添加到任意数量的单元格中.
这可能吗?基本上我想找到一个父视图UITableViewCell.
我让用户重新排序行tableView.因为此事件影响内容 - 单元格中的某些数值应该更新 - 在所有其他行中,我调用reloadDatain moveRowAtIndexPath.然后发生奇怪的效果.
即触摸拖动器时,细胞似乎重叠,并且一些细胞开始上下移动.重要的是要知道,细胞高度是变化的.
奇怪的是,如果我reloadData从中删除moveRowAtIndexPath,那么所有这些现象都会消失.只有内容无效.
那么重新排序后如何重新加载数据呢?
更新:我做了什么同时重新配置单元格viewDidLayoutSubviews而不是呼叫reloadData结束moveRowAtIndexPath.它的工作效果比我预期的要高90%,但有时它们的行数仍然有些高.
override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
//..
reorderOccured = true
}
override func viewDidLayoutSubviews() {
if reorderOccured {
for cell in tableView.visibleCells() as! [UITableViewCell] {
let ip = tableView.indexPathForCell(cell)
if ip != nil {
self.configureCell(cell, indexPath: ip!)
}
}
reorderOccured = false
}
}
Run Code Online (Sandbox Code Playgroud) 我不太确定这里发生了什么,但我遇到了一个我正在处理的联系表格.在我的表单中,我添加了向联系人添加电子邮件地址的功能.如下图所示,一旦用户点击"添加电子邮件",就会在"电子邮件"部分添加一行.

但是,在我单击删除电子邮件后,添加电子邮件按钮下方会出现一个额外的单元格(如下图所示).

看似先前的删除单元格中有一个小红框,好像表格没有重新加载一样.这是我的删除代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if( editingStyle == UITableViewCellEditingStyleDelete )
{
// Update the data source
NSMutableArray *fields = (NSMutableArray *)self.fields[@(indexPath.section)];
[fields removeObjectAtIndex:indexPath.row];
NSMutableArray *values = (NSMutableArray *)self.values[@([self fieldTypeAtIndexPath:indexPath])];
[values removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么那个细胞会继续存在呢?我可以[tableView reloadData]在上面的方法中调用并删除多余的单元格然后它会混淆动画.你能否清楚我在这里做错了什么?
ios ×4
uitableview ×3
cocoa-touch ×2
objective-c ×2
height ×1
ios7 ×1
reorderlist ×1
row ×1
uitextfield ×1