如何将 uitableview 选择与 indexpath 值居中

Posted

技术标签:

【中文标题】如何将 uitableview 选择与 indexpath 值居中【英文标题】:how to center uitableview selection with indexpath value 【发布时间】:2011-10-06 20:46:44 【问题描述】:

我正在保存子视图中的 indexPath 选择,并将其传递给带有委托的父视图。当我从主视图返回子视图时,我将 indexPath 传回给它,并在 tableviewcell 的辅助视图中向用户显示他们之前选择的单元格。

一个问题是,如果用户从一个相当大的列表中选择了一个单元格,则很难找到他们再次选择的单元格,以防他们想要更改它(因为他们犯了一个错误)

我想知道它们是否是一种使用 indexPath 或类似方法将 uitableview 的先前选择的单元格居中到屏幕中心的方法?

更新::

这是我试图实现的图形视图,以使其更易于理解..

第一步:选择单元格然后转到子视图并选择要传回主视图的单元格(值)(保存所选单元格的 indexPath)

第二步:用户要么想要更改他的选择,要么犯了一个错误,被要求选择他们选择的单元格下面的单元格...重复前面的步骤,但在视图中心显示之前选择的单元格..

【问题讨论】:

这是cell reusability 的问题吗? to center the previously selected cell of the uitableview to the center of the screen 是什么意思??? 可重用性没有问题,我的意思是将单元格居中到屏幕中心我的意思是当用户从子视图中选择一个单元格时,他们会立即被引导回主视图......如果然后他们意识到他们选择了错误的单元格我希望他们能够返回子视图并更改他们的选择......但是如果他们在表格视图中选择了一些方法,如果让他们很难找到他们的选择再次......所以我想在为用户加载视图后立即将这个(先前选择的单元格)放在屏幕上 是的,ScrollToIndexPath 应该可以工作 ;) 图片处理得很好。 谢谢 :) 仍在努力,因为我遇到了一些奇怪的错误.. 【参考方案1】:

你试过以下功能吗

[tableView scrollToRowAtIndexPath: atScrollPosition:UITableViewScrollPositionMiddle animated:YES]

【讨论】:

哇..这正是我想要的..我读过它并且应该可以工作..但是当我第一次尝试使用它作为我的表加载时出现错误我没有设置“oldCheckedData”.. [self.tableView scrollToRowAtIndexPath:oldCheckedData atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 我很高兴它很有用。如果 oldCheckedData 没有设置,也许你可以使用 [NSIndexPath indexPathForRow:0 inSection:0] 初始化它,第一次滚动到表格的顶部。 我一直在我的 viewDidLoad 方法中这样做 if (oldCheckedData != NULL) [self.tableView scrollToRowAtIndexPath:oldCheckedData atScrollPosition:UITableViewScrollPositionMiddle animated:YES];但是我不断收到此错误 ***** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678** 我会说在 viewDidAppear:(BOOL)animated 方法中使用它。这将确保在将视图添加到窗口后调用该函数。或者你可以在 viewWillAppear: 方法中使用它... 尝试在 if 条件中使用 [oldCheckedData length] 而不是 oldCheckedData != NULL【参考方案2】:

UITableView 是 UIScrollView 的子类 - 尝试设置内容偏移量(计算单元格高度和 indexPath 的多少)。

[tableView setContentOffset:CGPointMake(0, indexPath.row*cellHeight) animated:YES];

应该可以。您可能想以不同的方式进行数学运算。

【讨论】:

我会在 viewdidload 中调用它还是在其他方法中调用它? 我不确定我是否完全理解应用程序的设计,但据我所知,当您选择一个新单元格时,您希望将表格滚动到先前选择的位置,然后发送 indexPath与委托的父视图。如果发生这种情况,我会想象你想要这样做,所以在你选择一个新单元格时调用的委托方法中设置它。

以上是关于如何将 uitableview 选择与 indexpath 值居中的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UITableViews 用于多个数据集

UITableView 将某些单元格设置为“不可选择”

将 tapGesture 添加到 tableView 则无法执行 tableView(_ tableView: UITableView, didSelectRowAt indexPath: Index

iOS UITableView 与 UIPickerView

如何将 Plist 文件与 UITableView / UICollectionView 一起使用?

在“UITableView”中选择行时调用新视图