65.9K
CodeProject 正在变化。 阅读更多。
Home

整理:如何对 TableView 进行排序

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2014 年 11 月 12 日

CPOL

2分钟阅读

viewsIcon

17738

downloadIcon

74

在表格中进行排序的一些方法。

引言

我们想知道如何对一些表格值进行排序,这些值以某种奇怪的顺序排列。

背景

通过一些算法进行排序很好,但几乎每个人都有自己的喜好,因此需要一些手动交互。 但它是如何工作的呢?

一探究竟

代码在某种程度上是与 MVC 设计模式 交互的“样板代码”。 我强烈建议理解 MVC,因为几乎所有严肃的 Objective-C 代码都基于它构建。

在我的示例代码中,实现了 3 种不同的排序方式。

1. 按某种算法排序

这个实现强烈遵循 MVC 模式:控制器触发模型,模型对数据进行排序,视图显示它。 为了简洁起见,我使用了最简单的字符串比较。 也可以使用其他函数。

//Action from the view
- (IBAction)onButtonAtoZ:(id)sender
{
	NSLog(@"%s",__func__);
	//do sort: changing the Model data
	[_data sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
	//show data (present the changed Model)
	[self.tableView reloadData];
}

对于 3 行代码来说还不错,但使用其他函数进行排序变得很有趣,当模型数据不仅仅是一个字符串,而是一个复杂的对象时。 比如一个人或一个客户。 对距离或下一个生日进行排序可能是一些有趣的选择。

2. 用“苹果方式”排序

Apple 提供了关于 管理行重新排序 的精美文档,但有时缺乏实现一个可工作的示例项目。

要将表格设置为编辑模式,我们需要调用

[self.tableView setEditing:YES animated:YES];

但这仅在故事板中设置正确时才有效。 你需要在其中设置委托和数据源。

然后遵循 协议 模式的实现,适用于 UITableViewDataSource 协议。 我应该提到这是一个重要的方法,也是 MVC 模式的一部分,通过定义对象之间交互的方式。 这都在我的代码中,并在 Apple 的文档中解释。

3. Ray Wenderlich

Ray Wenderlich 的人经常通过提供 食谱:使用长按手势移动 Table View 单元格 而做得很好。 所以我忍不住要展示它。

要使其以这种方式工作,我们需要一个 LongGestureRecognizer。 为了分离这个解决方案,我添加和删除它。

registeredLongPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)];
		[self.tableView addGestureRecognizer:registeredLongPress];
		[_buttonLongPress setTitle:@"LongPress" forState:UIControlStateNormal];
	} else {
		NSLog(@"remove long press event");
		[self.tableView removeGestureRecognizer:registeredLongPress];

主要工作在处理程序 longPressGestureRecognized 中完成。 我也喜欢这些动画。 干得好。

我看到了在拖动图像中进行一些漂亮的绘画的潜在可能性。

关注点

实现一些排序确实是一项很好的工作,因此每个用户都可以按照自己的意愿体验其数据。 每次排序都有其优点和缺点。

历史

- 初始版本

© . All rights reserved.