首页
学习
活动
专区
工具
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 UITableView在reloadData 的时候,如果height的高度发生较大变化,contentOffset无法保持原来的大小时,会发生滚动的效果。...如果需要去除该滚动效果,可以在reloadData之后,调用scrollToRowAtIndexPath并设置animated:NO,最后再用setContentOffset:微调位置。...UITableView还有类似的问题,如果列表项过多时,scrollToRowAtIndexPath有时并不准确,比如有1000行时滚动到第500行,此时可能会出现滚到501或者499行的情况。...3、在build setting选中某个配置项,cmd+c复制然后到xcconfig的文件中,cmd+v就可以复制配置项到xcconfig中。

1.8K20

在iOS中怎样创建可展开的Table View?(下)

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

1.5K30
  • 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开发之UITableView联动实现城市选择器

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

    2.2K60

    【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来获取,

    93410

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

    在某种情况下,我们希望点击cell的时候不需要做出任何的反应,就可以修改这个属性。 allowsMultipleSelection:需要进行多行选择的时候就要将此设置为YES。...知道了这个属性之后,不要一说获取选中的cell的indexPath就只会用代理方法。& 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

    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

    《Motion Design for iOS》(三十八)

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

    45520

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

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

    1.4K30

    教你写个多表视图

    把当前的控制器作为一个父控制器,添加三个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

    在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-删除所有空白行,模式^$匹配所有空行。

    107.8K32

    deleteSections & deleteRows 我踩的坑

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

    1.9K30
    领券