首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在reloadData之后保存UITableView中的选定行

在reloadData之后保存UITableView中的选定行,可以通过以下方法实现:

  1. 在UITableView的代理方法中,使用tableView:willDisplayCell:forRowAtIndexPath:来保存选定行的indexPath。
代码语言:swift
复制
var selectedIndexPath: IndexPath?

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isSelected {
        selectedIndexPath = indexPath
    }
}
  1. reloadData之后,使用selectRow方法重新选定保存的indexPath。
代码语言:swift
复制
tableView.reloadData()

if let selectedIndexPath = selectedIndexPath {
    tableView.selectRow(at: selectedIndexPath, animated: false, scrollPosition: .none)
}

这样,在reloadData之后,选定的行将被保存并重新选定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发笔记(十一)— UITableView、ARC、xcconfig、Push

前言 分享iOS开发遇到问题,和相关一些思考,本次内容包括:UITableView滚动问题、ARC、xcconfig、Push证书。...正文 UITableView UITableViewreloadData 时候,如果height高度发生较大变化,contentOffset无法保持原来大小时,会发生滚动效果。...如果需要去除该滚动效果,可以reloadData之后,调用scrollToRowAtIndexPath并设置animated:NO,最后再用setContentOffset:微调位置。...UITableView还有类似的问题,如果列表项过多时,scrollToRowAtIndexPath有时并不准确,比如有1000时滚动到第500,此时可能会出现滚到501或者499情况。...3、build setting选中某个配置项,cmd+c复制然后到xcconfig文件,cmd+v就可以复制配置项到xcconfig

1.8K20

UITableView增加和删除、移动

复习一下: 1、控制器上添加一个UITableView,  暂时该UITableView控件变量名命名为为tableView, 设置控件代理,实现控制器UITableViewDataSource,...代理方法里面做相应处理,就可以实现删除功能,代码如下: //代理方法,实现后可以进行增加单元或者删除单元 - (void)tableView:(UITableView *)tableView commitEditingStyle...[self.arrays[indexPath.section] removeObjectAtIndex:indexPath.row]; // [tableView reloadData...3、UITableViewCell移动:实现一个代理方法,就可以进行单元格移动: //实现此方法,就可以移动单元格, 方法里面是让数据和样式移动保持一致 - (void)tableView:(UITableView...按住想要移动UITableViewCell哪个三横图标,可以进行移动 ?

1.8K30
  • iOS怎样创建可展开Table View?(下)

    接上篇:iOS怎样创建可展开Table View?...现在运行app.顶层cell可以点击之后展开或是合拢了,尽管点击子cell还没有发生任何改变,但结果令人印象深刻. ?...() } 一旦我们指定组和个数,我们直接将选中日期设置为了一个字符串.注意,这个字符串代理方法是一个字符串....接下来,让我们处理cell开关吧.当改变了开关值,我们需要做两件事情:首先,设置合适值("Single"或"Married"),显示到对应顶级cell上;之后,cellDescriptors...(例如,将cell描述列表保存到文件),然而,那已经超出了我们目标;我们最开始所想是实现一个可展开tableView,根据需求显示或隐藏cell,以及我们最终所做.我相信,在这篇教程你会找到左右有用信息

    1.5K30

    iOS开发之UITableView联动实现城市选择器

    iOS开发之城市选择器一文中用两列UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动很多地方用得上,而且方法有好几种,我这里选择了个人喜欢一种方式...这种方式总体思路如下: 1、添加两个UITableView到当前控制器,分别设置它们尺寸,然后拖线到控制器 2、左边表格设置数据源和代理为当前控制器,然后显示数据,右边表格也设置数据源为当前控制器...3、监听左边表格控制器点击事件,点击事件刷新右边表格 这时候就有问题了,一个控制器要成为2个UITableView数据源和代理,怎么办?...*/ - (NSArray*)provinces { if (_provinces == nil) { //将省份保存到数组 但是字典保存是无序 所以读出来省份也是无序...; } //右边要根据选中来设置 else { //通过省份去获取对应城市 self.cities = [self.cityNames valueForKey

    2.1K60

    【iOS 开发】tableView updates 对比 reloadData

    Paste_Image.png 如图有一个 TableView,每行显示这一是第几行,现在我希望每按一次 update 按钮,就动态地在下方加两。...() } 用膝盖想也知道,这会使得前四没有被改动地方也被刷新一遍,带来了不必要性能损耗。...,当前 row 总数量 UI 上试图 4 变成 5,然而数据源是 6,它会检查使用者对 tableView UI 操作,最后是不是和 numberOfRows 方法获取值相对应。...cellForRow 方法,可能导致显示结果与数据源不一致;需要手动保证 insertRows、deleteRows 之后,row 数量与 numberOfRows 结果一致,否则会运行时崩溃 -...--- 部分文章没有写,总结提到了部分放在完整 demo 里面了:demo Github 地址

    1.8K30

    iOS-TableView统一数据源代理

    ,而这些大多都会通过其代理函数来实现,所以VC我们通常需要实现大量TableView代理函数,如下面这样 func tableView(_ tableView: UITableView, heightForHeaderInSection...(at: indexPath, animated: true) } 如果上面的代码每个VC中都实现一次,不仅写了很多重复代码,还增加了VC复杂度,所以我在想能不能有一个统一代理类,我们TableView...Model1(),Model1(),Model1()],[Model2(),Model2(),Model2(),Model2()]] // 4.刷新视图 tableView.reloadData...网络请求:这里是做网络请求地方,并且将请求后数据保存在代理类 刷新视图 确定cell类型:cell是通过它注册identifier来创建,所以根据indexPath来返回相应cell注册identifier...即可 头部高度:header高度,可以是定值,也可以根据section来动态返回 尾部高度:footer高度,可以是定值,也可以根据section来动态返回 高:这里高可以通过data来获取,

    92210

    UITableView进阶:常用代理方法及属性1. 常用属性2. 进阶常用代理方法

    某种情况下,我们希望点击cell时候不需要做出任何反应,就可以修改这个属性。 allowsMultipleSelection:需要进行多行选择时候就要将此设置为YES。...知道了这个属性之后,不要一说获取选中cellindexPath就只会用代理方法。& indexPathsForVisibleRows:这个方法其实并不太经常使用,但是很能提升逼格。...return YES; } 拖拽之后对应执行方法 // Override to support rearranging the table view. - (void)tableView:(UITableView...[tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight]; // 局部刷新指定...,就不要用此方法 [tableView reloadData]; #4. tableViewCell排序 ##4.1 cell交换排序 - cell拖拽对应执行方法中进行。

    1.2K20

    《Motion Design for iOS》(三十八)

    我自己iPhone app Interesting也使用了波浪形动画。来看看我app动画并构建它。...当请求返回时,我需要用UITableView来放置文章数据,每行一篇文章。一些app选择在数据返回时淡入列表,一些会将地滑动到位置上,而其他则立即显示,没有任何动画。...然后我会调用[self.tableView reloadData]将数据加载到列表中去,这时候所有的行都在它们正常位置上,但因为整个列表透明度为0并且是隐藏,屏幕上什么都看不见。...我遍历现在屏幕上可见并且移动UITableView将行都放到屏幕底部。我通过改变列表位置,将其移动到整个列表高度下方来达到目的,这样每行都会藏在屏幕底部了。...block,我延迟值设为了diff*b。

    45320

    iOS操作属性列表plist(增删改查)

    引 iOS存储方式之一——属性列表plist,还是经常见到,可以很方便用来管理一些有序批量数据,特别是用来显示固定内容到表单上时,不需要在代码反复地繁琐编写数组,而可以plist属性列表中进行可视化操作...Xcode左侧工程文件列表,找一个你喜欢位置,一般Supporting Files文件夹内,新建我们plist文件,方法是右键选择New File...或者按command+N键打开新建文件窗口...storyboard添加Table View: 我们打开storyboard文件,右下方控件列表,找到Table View,拖动到storyboard里视图中去,如图: 选择右侧最右边关联部分...*tableView; @end 2、读取plist文件 我们通过plist文件名来找到文件,把路径保存在变量path,然后用一个数组获取plist文件内容,并转移到我们刚才创建用来存储...这里只要简单地提供表单行数一级每一内容就可以了,我们通过刚才数组,通过行数来获取对应位置plist内容: //ViewController.m文件 #pragma mark

    1.6K20

    教你写个多表视图

    把当前控制器作为一个父控制器,添加三个UITableViewController实例作为子控制器,把父控制器 scrollView 作为容器,然后添加子控制器 tableView 作为子视图...因为这边只是个 Demo,所以我直接在 cell 显示cellData值,那cellData 值在哪里设置呢?...显然是HomeContainerViewController: let tableViewDataList = ["first table", "second table", "third table...() return cell } 真实场景中一般是会在 dataSource 中放一个 urlString 属性,然后一旦这个属性被赋值就自动联网取数据。...这边 cell 是会被复用翻到第三页时,会复用第一页 cell ,第四页复用第二页 cell……依此类推,所以需要给 cell tableView调用 reloadData方法,不然就算改变了表数据

    1.3K30

    iOS中表视图(UITableView)使用详解

    iOSUITableView使用总结 一、初始化方法 - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style...通过这个属性,可以手动设置分割线位置偏移,比如你向让tableView分割线只显示右半边,可以如下设置: UITableView * tab = [[UITableView alloc]initWithFrame...- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;   获取某个celltableView位置信息 - (NSIndexPath *)...,//同UITableViewScrollPositionTop     UITableViewScrollPositionTop,//定位完成后,将定位显示tableView顶部         ...UITableViewScrollPositionMiddle,//定位完成后,将定位显示tableView中间        UITableViewScrollPositionBottom//

    1.4K30

    VimVi删除、多行、范围、所有及包含模式

    使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷命令可以删除多行、范围。 删除 Vim删除一命令是dd。...以下是删除分步说明: 1、按Esc键进入正常模式。 2、将光标放在要删除上。 3、键入dd并按E​​nter键以删除该行。 注:多次按dd将删除多行。...删除范围 删除一系列语法如下: :[start],[end]d 例如,要删除从3到5,您可以执行以下操作: 1、按Esc键进入正常模式。 2、输入:3,5d,然后按Enter键以删除。...删除包含模式 基于特定模式删除多行语法如下: :g//d 全局命令(g)告诉删除命令(d)删除所有包含。 要匹配与模式不匹配,请在模式之前添加感叹号(!): :g!.../foo/d-删除所有不包含字符串“foo”。 :g/^#/d-从Bash脚本删除所有注释,模式^#表示每行以#开头。 :g/^$/d-删除所有空白,模式^$匹配所有空行。

    92.7K32

    deleteSections & deleteRows 我踩

    那分析到这一步,解决办法也就有了,你删除完组或者cell之后重新reloaddata是能解决crash,看看效果: ? 问题到了这里你可以说解决了,但也可以说没解决。...找一个方法解决 ---- 找一个办法解决这个问题,我们前面有说要是reloaddata一次就解决问题了,那我们reloaddata最重要操作或者目的是什么呢?...其实也很简单,我们赋给cellindex我们可以执行完删除之后自己重新组装一次!那怎么组装呢?...oc也是指针),并没有重新赋值,这时候我们就可以 model 里面写一个 IndexPath 进去,然后每一次删除完之后我们自己操作在数据源重新排列这个modelindexPath ,删除点击回调时候直接回调这个...model ,选择删除时候我们也删除从model获取到idnex不就解决了我们问题了嘛!

    1.9K30
    领券