ios – UITableView,替换选择时的单元格视图

ios – UITableView,替换选择时的单元格视图,第1张

概述是否可以替换所选单元格的单元格视图?我已将我的控制器注册为数据源和委托.对单元格视图,行号,选择状态等的请求都很好.在单元格选择回调中,我试图让表格视图用新视图重新加载单元格(而不是实际数据!).基本上,我希望单元格视图展开并显示更多基础数据(如果已选中).问题是我不知道如何使表视图向我的控制器询问新视图.我可以看到视图正在请求单元格高度,但仅此而已. 在视图上调用reloadData可以正常工作 是否可以替换所选单元格的单元格视图?我已将我的控制器注册为数据源和委托.对单元格视图,行号,选择状态等的请求都很好.在单元格选择回调中,我试图让表格视图用新视图重新加载单元格(而不是实际数据!).基本上,我希望单元格视图展开并显示更多基础数据(如果已选中).问题是我不知道如何使表视图向我的控制器询问新视图.我可以看到视图正在请求单元格高度,但仅此而已.

在视图上调用reloadData可以正常工作,但它效率低下并且带有一系列自己的问题(动画可能性,维护选择状态等).

解决方法 这是我要采取的方法.
@property (nonatomic,strong) NSIndexPath *selectedindexPath;

将NSIndexPath类型的属性设置为控制器以存储选择的索引路径.

- (voID)tableVIEw:(UItableVIEw *)tableVIEw dIDSelectRowAtIndexPath:(NSIndexPath *)indexPath {    self.selectedindexPath = indexPath;    [tableVIEw reloadRowsAtIndexPaths:@[indexPath] withRowAnimation: UItableVIEwRowAnimationNone];}- (UItableVIEwCell *)tableVIEw:(UItableVIEw *)tableVIEw cellForRowAtIndexPath:(NSIndexPath *)indexPath {    if ([indexPath compare:self.selectedindexPath] == NSOrderedSame) {        // Create your custom cell here and return it.    }    else {        // Should create a normal cell and return it.    }}

究竟.另请注意,您可能想要取消选择.这是Swift中的完整代码.根据需要在cellForRowAtIndexPath中使用selectedindexPath.

//选择tableVIEwController
导入UIKit

class SelectingtableVIEwController:UItableVIEwController
{
内部var selectedindexPath:NSIndexPath? =没有

overrIDe func vIEwDIDLoad()    {    super.vIEwDIDLoad()    tableVIEw.estimatedRowHeight = 68.0    tableVIEw.rowHeight = UItableVIEwautomaticDimension    self.cleaRSSelectionOnVIEwWillAppear = false;    }overrIDe func tableVIEw    (tableVIEw:UItableVIEw,dIDSelectRowAtIndexPath indexPath:NSIndexPath)        {        print("dID select....")        // in fact,was this very row selected,// and the user is clicking to deselect it...        // if you don't want "click a selected row to deselect"        // then on't include this clause.        if selectedindexPath == indexPath            {            print("(user clicked on selected to deselect)")            selectedindexPath = nil            tableVIEw.reloadRowsAtIndexPaths(                [indexPath],withRowAnimation:UItableVIEwRowAnimation.None)            tableVIEw.deselectRowAtIndexPath(indexPath,animated:false)            return            }        // in fact,was some other row selected??        // user is changing to this row? if so,also deselect that row        if selectedindexPath != nil            {            let pleaseRedrawMe = selectedindexPath!            // (note that it will be drawn un-selected            // since we're chaging the 'selectedindexPath' global)            selectedindexPath = indexPath            tableVIEw.reloadRowsAtIndexPaths(                [pleaseRedrawMe,indexPath],withRowAnimation:UItableVIEwRowAnimation.None)            return;            }        // no prevIoUs selection.        // simply select that new one the user just touched.        // note that you can not use Apple's willdeselectRowAtIndexPath        // functions ... because they are freaky        selectedindexPath = indexPath        tableVIEw.reloadRowsAtIndexPaths(            [indexPath],withRowAnimation:UItableVIEwRowAnimation.None)        }}
总结

以上是内存溢出为你收集整理的ios – UITableView,替换选择时的单元格视图全部内容,希望文章能够帮你解决ios – UITableView,替换选择时的单元格视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1098691.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存