整理:如何对 TableView 进行排序
在表格中进行排序的一些方法。
引言
我们想知道如何对一些表格值进行排序,这些值以某种奇怪的顺序排列。
背景
通过一些算法进行排序很好,但几乎每个人都有自己的喜好,因此需要一些手动交互。 但它是如何工作的呢?
一探究竟
代码在某种程度上是与 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 中完成。 我也喜欢这些动画。 干得好。
我看到了在拖动图像中进行一些漂亮的绘画的潜在可能性。
关注点
实现一些排序确实是一项很好的工作,因此每个用户都可以按照自己的意愿体验其数据。 每次排序都有其优点和缺点。
历史
- 初始版本