• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - XCode iOS7 - 带有 UITextView 的动态单元格,如 Reminder App

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:27:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要创建一个与内置提醒应用程序具有相同行为的应用程序。创建这个有一些问题:

  • 具有动态高度并作为 UITextView 内容“增长”的单元格
  • 选择触摸的单元格
  • 当用户编辑内容时刷新单元格的高度(动态)

我已经用一些技巧解决了动态高度。

剩下的问题是:

如果单元格“完全”带有 UITextView,如何知道用户选择了哪个单元格?

现在我已经使用 textViewDidBeginEditing 方法来了解单元格并将 UITableView 滚动到它:

- (void)textViewDidBeginEditingUITextView*)textView
{
    MemoViewCell* cell = (MemoViewCell *)[self parentCellFor:textView];
    if (cell)
    {
        NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];
        currentIndexPath = indexPath;
        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
    }
}

- (UITableViewCell*)parentCellForUIView*)view
{
    if (!view)
        return nil;
    if ([view isMemberOfClass:[MemoViewCell class]])
        return (UITableViewCell*)view;
    return [self parentCellFor:view.superview];
}

如何在不丢失焦点的情况下刷新单元格高度?

对此,我用过这种方法:

-(void)textViewDidChangeUITextView *)textView
{
    NSMutableDictionary *dataSourceItem = [self.model.dataSource objectAtIndex:currentIndexPath.row];
    [dataSourceItem setObject:textView.text forKeyedSubscript"body"];
    [self.model.dataSource setObject:dataSourceItem atIndexedSubscript:currentIndexPath.row];

    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

当文本更改时,我得到新文本,我在模型中更改它并调用 beginUpdated 和 endUpdates。

当然,这行得通,但一切都非常缓慢......你有什么想法以一种更优雅的方式,也许......高效吗?

如果我调用 reloadRowsAtIndexPaths: 我失去了对单元格的关注。



Best Answer-推荐答案


首先,如果你在你的动态高度技巧中使用了委托(delegate)方法- (CGFloat)tableViewUITableView *)tableView heightForRowAtIndexPathNSIndexPath *)indexPath;,记得实现这个方法沿着 - (CGFloat)tableViewUITableView *)tableViewestimateHeightForRowAtIndexPathNSIndexPath *)indexPath;,对性能有很大帮助。

然后专注于您的特定项目,如果我正确理解您的目标,您真正想要的是仅在修改 TextView 时更新表格 View 的布局。目前,您在每次文本更改时更新它。你可以考虑在-(void)textViewDidChangeUITextView *)textView里面使用一个条件,比如:

if ([textView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height !=
textView.frame.size.height) {
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

仅当您现有的单元格布局尊重 TextView 的固有内容大小时,作为示例给出的条件才有效,否则您将需要调整条件。

关于ios - XCode iOS7 - 带有 UITextView 的动态单元格,如 Reminder App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744228/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap