相关疑难解决方法(0)

在不关闭键盘的情况下更改UITableView行高

我在UITableViewCell中有一个TextView.TextView中的文本可以在那里进行编辑.

TextView根据文本包含的行数垂直增长和缩小.到目前为止,我还没有发现让包含TextView的行动态增长和缩小的可能性.

[tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

要么

[tableView reloadRowsAtIndexPaths: withRowAnimation:];
Run Code Online (Sandbox Code Playgroud)

不起作用,因为他们在每次更改时都会关闭键盘.

有没有办法在不解除键盘的情况下更改UITableView中单个行的高度?

height row objective-c uitableview ios

13
推荐指数
1
解决办法
4141
查看次数

UITextField UITableViewCell的子视图,获取单元格的indexPath

我添加了一个UITextField作为a的子视图UITableViewCell.然后我添加了一个target,selector以便我知道什么时候UIControlEventEditingChanged.这很好用,但我想知道它所在indexPath的单元格UITextField,因为它可以添加到任意数量的单元格中.

这可能吗?基本上我想找到一个父视图UITableViewCell.

cocoa-touch objective-c uitableview uitextfield ios

8
推荐指数
2
解决办法
7668
查看次数

重新排序后如何重新加载tableview?行具有可变高度

我让用户重新排序行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)

reorderlist uitableview ios heightforrowatindexpath

8
推荐指数
1
解决办法
1875
查看次数

UITableView deleteRowsAtIndexPaths不起作用

我不太确定这里发生了什么,但我遇到了一个我正在处理的联系表格.在我的表单中,我添加了向联系人添加电子邮件地址的功能.如下图所示,一旦用户点击"添加电子邮件",就会在"电子邮件"部分添加一行.

创建联系人图像

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

之前和之后

看似先前的删除单元格中有一个小红框,好像表格没有重新加载一样.这是我的删除代码:

- (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]在上面的方法中调用并删除多余的单元格然后它会混淆动画.你能否清楚我在这里做错了什么?

cocoa-touch ios ios7

5
推荐指数
1
解决办法
2452
查看次数