如何让用户重新排序 UITableView 中的部分

2024-04-10

我正在开发一个包含股票的应用程序,按投资组合排列。所以这很适合表格视图,我正在研究编辑交互;它足够简单,允许用户添加或删除股票,将它们拖动到一个投资组合或另一个投资组合中,但我无法优雅地做的一件事是让用户将一个投资组合拖动到另一个投资组合的上方或下方。

我现在有一个 hacky 解决方案,其中每个部分的第 0 行是投资组合名称,如果他们将该行拖动到另一个投资组合上方,则整个表将重新加载并切换投资组合。这可行,但感觉不太自然。

我确信我不是第一个遇到这个问题的人;有人有更精致的解决方案吗?

一个相关的问题 - 如何让用户创建新的作品集/部分?


十分简单:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
{
    NSMutableArray *_data;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _data = [NSMutableArray arrayWithObjects:@"One", @"Two", @"Three", nil];
    self.tableView.editing = YES;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _data.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"reuseIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:identifier];
    }
    cell.textLabel.text = _data[indexPath.row];
    cell.showsReorderControl = YES;

    return cell;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    [_data exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
}

@end

EDIT:

你现在要求的有点复杂。我创建了一个将表格放入单元格的示例,这为您提供了嵌套单元格。这个例子非常没有吸引力,但它确实有效,而且你没有理由不能让它看起来很漂亮,所以检查一下:

https://github.com/MichaelSnowden/TableViewInCell https://github.com/MichaelSnowden/TableViewInCell

如果这对你不起作用,请尝试制作UITableView moveSection:(NSInteger) toSection:(NSInteger)看起来不错。该方法的文档在这里 https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/moveSection%3atoSection%3a.

我对上述方法的经验是,它非常容易使用,而且调用时​​看起来很漂亮。一个聪明的使用方法是使用点击手势识别器创建标题。在第一次点击时,突出显示该部分并记录该索引路径,在第二次点击时,调用两个索引路径上的方法。它应该可以很好地工作,但是您不会从中进行拖放操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让用户重新排序 UITableView 中的部分 的相关文章

  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 领域:结果 和列表

    是否可以转换Results
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 在 IOS 中从 iPhone 删除资产(图片或视频)

    我正在开发一个 Iphone 应用程序 我可以使用 Assetslibrary 枚举资产并将它们加载到表视图中 用户可以在应用程序中删除一行 图片 视频 但如何直接从我的应用程序更新 Iphone 相册 否则 刷新时 表视图将重新加载之前删
  • WKWebView 未打开自定义 URL 方案(js 在新窗口中打开自定义方案链接)

    我有一个WKWebView在我的应用程序中 我不使用UIWeb视图 因为由于某种奇怪的原因 它无法正确打开包含大量 JS 代码的网页 当我点击链接时自定义 url 方案 scm 它确实nothing My code void viewDid
  • 对于使用 CCCrypt() 的 AES128,密钥可以长于 128 位吗?

    我正在使用CCCrypt https developer apple com library archive documentation System Conceptual ManPages iPhoneOS man3 CCCrypt 3c
  • 我们能否检测用户是否通过主页按钮或锁定按钮离开而没有监听 darwin 通知?

    我最近向应用程序商店提交了一个新的二进制文件并将其发送以供审核 但它立即被拒绝并显示以下消息 不支持的操作 不允许应用程序监听设备锁定通知 经过一番挖掘后 我发现我们无法使用 com apple springboard lockstate
  • 为什么 UITableViewCell 不可访问(对于 VoiceOver)

    我并不是想解决任何问题 当然你可以设置isAccessibilityEnabled true它有效 我的问题是 为什么它默认关闭并且界面生成器中没有适当的部分 在我看来 不建议使 UITableViewCell 子类可访问 有没有更好的方法
  • 添加/删除带有动画的 UITableViewCell?

    我知道这听起来像是一个愚蠢的问题 但我到处都看过 我怎样才能做到这一点 我知道如何使用 swype to delete 方法来执行此操作 但是我如何在该函数之外执行此操作 请发布一些代码示例 Thanks Coulton self tabl
  • 通过 renderInContext 定位要绘制的视图:

    我想画一个UIView在我目前的CGGraphicsContext 我画的是UIView via renderInContext 但它的位置不正确 始终位于左上角 我拥有所有的价值观UIView可用于绘制UIView CGRect fram
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • iOS 防止计时器 UILabel 在数字变化时“晃动”

    我有一个UILabel它以以下格式显示计时器的输出MM ss SS 分 秒 厘秒 但是随着厘秒宽度的变化 它从左向右 摇动 例如 11 比 33 窄 有什么办法可以减轻这种情况吗 我尝试过将其居中 给它固定的宽度 但它们似乎没有帮助 从iO
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt

随机推荐

  • 在不知道行号的情况下,如何将文件读取到以给定单词开头的字符串?

    我在日志文件中有测试结果 格式如下 无用的信息 无用的信息 有用的信息 有用的信息 测试成功 每个部分中的行数可能有所不同 因此我想检查双等号字符 的第一次出现 并将该行读入字符串 直到文件末尾 目前我正在使用以下代码将整个文件读入字符串中
  • android studio 3.1 中的模块:应用程序没有系统资源管理器

    android studio 3 1 中的模块 应用程序没有系统资源管理器 问题是 当它 android studio android 3 1 我不幸进入完成内置库文件后 它显示下载或刷新如果你已经下载 我使用下载之后这个错误来了 该文件名
  • type(myVar) 和 (type)myVar 有什么区别?

    我正在 cplusplus com 上阅读完整的教程 手动编码和编译每个示例 我经常会偶然发现一些让我困惑的事情 我目前正在学习这一部分 http www cplusplus com doc tutorial structs http ww
  • 安装带有 Capacitor 的 BackgroundGeolocation 插件后,无法在 Android 上构建 Ionic 应用程序

    我正在尝试将我的应用程序从 Cordova 迁移到 Capacitor 但我仍然需要使用后台地理定位等功能 为此 我正在使用这个插件 https ionicframework com docs native background geolo
  • 为什么 git 没有 pre-push hook?

    在将更改推送到远程 位于 bitbucket 上 之前 我希望有一个钩子来运行我的测试 我通常会从 master 分支出来 当该功能完成后 我会将其合并回 master 并推送 这就是我寻找预推送钩子的原因 相反 我使用了仅限于主分支的合并
  • 需要帮助在两个套接字之间创建 TCP 中继

    我有以下情况 SomeServer S lt gt C MyApp S lt gt C User S represents a server socket C represents a client socket 本质上 MyApp发起通信
  • 初始化后无法应用 JqueryUI 可调整 AspectRatio?

    我试图在 JQueryUI 可调整大小中动态打开 关闭纵横比 但是即使将选项设置为 false 后 它仍然保持纵横比 以下是我当前正在使用的代码 aspect check click function var ischecked aspec
  • Python setuptools:包目录不存在

    我有一个与此相关的项目setup py file import setuptools with open README md r as fh long description fh read setuptools setup name ve
  • mousemove 事件是否每帧触发一次?

    In this 小提琴演示 https jsfiddle net JoeZheng uy9poL1j 按下并移动鼠标会根据鼠标的位置绘制点 绘制方法是听mousemove回调 但它绘制了离散点 表明mousemove事件不会连续触发 更重要
  • 枚举值的类型[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取表示接口键的类型 interface I a string b string const i keyof I typeof i is a b 有没有办法类似地获取表示枚举值的类型 enum
  • 在 Dart 中实现观察者模式

    我想在 Dart 中实现观察者模式 但我不知道如何去做 假设我有一堂课 class MyClass String observed field 现在 每当我更改字段时 我都想将 observed fieldchanged 字符串打印到控制台
  • UIWebView 到 UIImage

    我尝试使用此方法从 UIWebView 捕获图像 但图像仅包含屏幕的可见区域 如何捕获 UIWebView 的完整内容 包括不可见区域 即整个网页到一张图像中 UIImage captureScreen UIView viewToCaptu
  • undefined 不是一个对象(评估route.routeName)

    when update the expo from 16 0 0 to 24 0 0 and react navigation from git https github com react community react navigati
  • 如何将UIView裁剪为半圆?

    我想将 UIView 裁剪为半圆形 提前致谢 一个方便的方法就是子类 aUIView 在其上添加一个图层 并使视图颜色透明 如果不是默认情况下 import UIKit class SemiCirleView UIView var semi
  • BaseX RESTXQ“你好世界”示例

    我正在努力开始使用基本 REST API 我已下载并安装了最新版本的 Windows 版 BaseX 我通过单击 BaseX 安装添加到 Windows 开始菜单中的 BaseX Server 开始 图标启动了 BaseX Server 看
  • node/express:使用Forever连续运行脚本时设置NODE_ENV

    我怎样才能设置NODE ENV http expressjs com guide html configuration当我使用时变量 参数为 生产 forever https github com indexzero forever启动我的
  • 如何利用 Android 的“清除缓存”按钮

    在 Android 的设置中 在 管理应用程序 活动中 单击应用程序时 数据会分解为应用程序 数据和缓存 还有一个清除缓存的按钮 我的应用程序缓存音频文件 我希望用户能够使用此按钮清除缓存 我如何存储它们 以便它们与缓存集中在一起并且用户可
  • 使用另一个域的用户凭据连接到 SQL Server

    如何使用另一个域中的用户登录名 密码连接到 SQL Server 数据库 如果我使用我的帐户连接到数据库 它工作正常 cnxn pyodbc connect DRIVER SQL Server SERVER server name DATA
  • Netbeans 错误:项目文件夹已存在且不为空

    我安装了Netbeans 因为我正在读这本书 Java in 21 days 我在编程领域完全是个新手 当我尝试在 Netbeans 中打开一个新项目时 出现错误 项目文件夹已存在且不为空 删除 nbproject 文件夹并重新启动 IDE
  • 如何让用户重新排序 UITableView 中的部分

    我正在开发一个包含股票的应用程序 按投资组合排列 所以这很适合表格视图 我正在研究编辑交互 它足够简单 允许用户添加或删除股票 将它们拖动到一个投资组合或另一个投资组合中 但我无法优雅地做的一件事是让用户将一个投资组合拖动到另一个投资组合的