如何在左侧对 UITableViewCell 进行重新排序控制?

2024-02-08

我正在做一个新闻阅读器应用程序,我想让用户可以选择显示/隐藏新闻类别(例如热门新闻、商业、技术、体育等)并像 Android 中的 BBC 新闻应用程序一样重新排序。

见下图:

我的问题是:

  • 如何在单元格左侧进行重新排序控制? (编辑模式下默认位置在单元格右侧)
  • 我有一个复选框自定义控件。如何将其放在单元格的右侧?

回答[如果您没有使用任何配件(详细信息披露等)]

(0) 我假设您已设置好表格等。

(1) 仅当您的表格单元格始终可拖动时,此解决方案才有效。将其添加到 viewDidLoad 中的 Table View Controller .m 文件中。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setEditing:YES];
}

(2) 为了使您可以重新排序单元格,请添加cell.showsReorderControl = YES;到您的 tableView:cellForRowAtIndexPath:。

(3) 确保您具有 tableView:canMoveRowAtIndexPath: 和 tableView:moveRowAtIndexPath:toIndexPath: 方法。

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}

(4) 因为您想要左侧的重新排序控件,所以我们必须删除通常在那里的删除圆圈,并且 tableView:editingStyleForRowAtIndexPath: 方法可以做到这一点。

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

(5) 最后一步,神奇的地方 - 添加 tableView:willDisplayCell:forRowAtIndexPath: 方法,搜索单元格的子视图,将其范围缩小到私有 UITableViewCellReorderControl,最后覆盖它。

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    for(UIView* view in cell.subviews)
    {
        if([[[view class] description] isEqualToString:@"UITableViewCellReorderControl"])
        {
            // Creates a new subview the size of the entire cell
            UIView *movedReorderControl = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame))];
            // Adds the reorder control view to our new subview
            [movedReorderControl addSubview:view];
            // Adds our new subview to the cell
            [cell addSubview:movedReorderControl];
            // CGStuff to move it to the left
            CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);
            CGAffineTransform transform = CGAffineTransformIdentity;
            transform = CGAffineTransformTranslate(transform, -moveLeft.width, -moveLeft.height);
            // Performs the transform
            [movedReorderControl setTransform:transform];
        }
    }
}

我花了近十个小时试图找出配件的解决方案,但我无法做到。我首先需要更多的经验和知识。简单地对公开按钮上的重新排序控件执行相同的操作是行不通的。所以我希望这暂时有效;如果我将来弄清楚了,我一定会更新它。

嗨,Hoang Van Ha,这是我的第一个答案,我一个月前才开始学习 Objective-C,所以我还是一个菜鸟。

我一直在尝试用我的应用程序做同样的事情,并且已经花了几个小时寻找如何做到这一点。苹果的文档在这方面并没有多大帮助。当人们简单地链接到文档时,我发现这非常令人沮丧。我想对他们大喊大叫。希望我的回答对你有帮助。

很多荣誉b2Cloud http://b2cloud.com.au/about因为我使用了他们的一些代码本文 http://b2cloud.com.au/how-to-guides/reordering-a-uitableviewcell-from-any-touch-point并根据我的答案进行了调整。

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

如何在左侧对 UITableViewCell 进行重新排序控制? 的相关文章

  • CoreAnimation 性能分析 - CAReplicatorLayer 与 CAShapeLayer

    我正在制作一个依赖 CoreAnimation 的应用程序 它有一个 CAReplicatorLayer 和一个 CAShapeLayer 作为子层 当进行 12 次复制 然后对路径进行动画处理 在 touchMoved 上更改它 时 一旦
  • CNContact 添加新的联系人问题

    我在通过以下方式添加联系人时遇到问题联系框架 我使用的是装有 iOS 12 1 2 的 iPhone 5s 设备 我添加联系人的代码如下 let saveRequest CNSaveRequest saveRequest add self
  • 使用prefersLargeTitles 和 UITableView 平滑滚动

    我在使用时遇到了滚动问题prefersLargeTitles并添加了UITableView 如果我设置prefersLargeTitles在导航控制器中 其根是UITableViewController一切都很好 导航大标题的滚动方式与我们
  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • 自动调整大小完成后如何获取帧大小

    我想知道 如何以及何时 viewDidLoad viewWillAppear viewDidAppear 可以获得自动调整大小以适合其父视图的 UIViews 框架大小 从你的问题中不清楚你为什么想要它 但我想这是为了布局你的子视图 幸运的
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • 如何向 JSQMessagesViewController 单元添加自定义视图,使其包含一个带有一些按钮和文本视图的视图?

    我在用https github com jessesquires JSQMessagesViewController issues 1820 https github com jessesquires JSQMessagesViewCont
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • iOS App布局错误,调用状态栏

    在主动通话和应用程序布局期间面临状态栏问题 我正在使用自动布局 当我运行应用程序 然后开始通话时 一切正常 UI 会随着状态栏的更改而正确缩放 但是 如果我首先开始通话 然后运行应用程序 应用程序屏幕会移动到底部 20pt 就像它们对新状态
  • 使用隐藏的 SFSafariViewController 获取 Safari cookie

    我正在阅读以下关于从移动网页到本机 iOS 9 应用程序对用户进行身份验证的文章 并且想知道如何最好地实现类似于下面讨论的隐藏控制器的隐藏 safari 视图控制器 https library launchkit io how ios 9
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • Cognito/IAM 策略和 S3 获取对象

    我正在尝试将 S3 和 Cognito 集成到我的 iOS 应用程序中 但到目前为止尚未成功 我相信该错误与我针对 Auth 和 Unauth 用户的 IAM 策略有关 所以这是我的政策 Version 2012 10 17 Stateme
  • 应用未能及时恢复

    我在一个非常具体的场景中遇到 未能及时恢复 崩溃 我认为与看门狗相关 仅在从后台恢复时 并且仅在进入后台后在很短的时间内执行此操作 a最多几秒钟 这似乎是相关的崩溃日志 Incident Identifier E30F2238 5B15 4

随机推荐

  • 使用 MySQL DB 完成 Java 桌面应用程序后如何创建安装程序?

    我已经用 mySQL 数据库编写了一个 Java 桌面应用程序 我想让应用程序在netbeans之外运行并让它安装在其他计算机上 我知道如何构建项目并创建可运行的 jar 文件 但这需要我将数据库本身导出到我希望应用程序运行的另一台计算机
  • apache 全局基本身份验证

    我有 apache Web 服务器和几个虚拟主机 我希望它们都支持基本授权 AuthType Basic 但是 Auth 指令似乎仅适用于
  • NSURLSession 使用 get 发送参数

    我正在尝试解析来自 php 的信息 但我需要发送一个字典参数 所以我尝试了一些事情 我看到了教程 示例 但我陷入困境 所以我回到了开始 这是什么好方法这样做吗 func asd let urlPath http xxxxx php let
  • 为什么 Spyder 在 OS X 中这么慢?有没有办法让它更快?

    我安装了 Spyder 作为 Anaconda Python 分析包的一部分 但我发现编辑器非常慢 按键和屏幕上显示字母之间总是有半秒的延迟时间 我在一台相当新的 i7 MacBook 上使用 Spyder 这个问题是由 Qt 产生的 Qt
  • 监听/通知 pgconnection 宕机了 java?

    我正在使用 PostgreSQL DB 并应用它LISTEN NOTIFY功能 所以我的监听器位于我的 AS 应用程序服务器 上 并且我在数据库上配置了触发器 这样当对表执行 CRUD 操作时NOTIFY请求在 AS 上发送 LISTENE
  • python 类继承树

    假设我有这样的课程 class a object pass class b a pass class c b pass class d c pass class e b pass 我想要一个可以执行以下操作的函数 gt gt gt get
  • 哈希表和子串匹配

    我有数百个键 例如 红苹果 maninred foraman 蓝苹果 我有与这些键相关的数据 数据是一个字符串 末尾有相关的键 红苹果 树上有红苹果 maninred 她看到了maninred 孔洞 他们买了现在的孔洞 蓝苹果 令人惊讶 但
  • 在 C++ 中创建全局“常量”的正确方法[重复]

    这个问题在这里已经有答案了 通常 我定义真正的全局常量 比如说 pi 的方法是将 extern const 放置在头文件中 并在 cpp 文件中定义该常量 常量 h extern const pi 常量 cpp include consta
  • T-SQL。如何在一个 SELECT 中创建列表作为逗号分隔的字符串?

    MS SQL 2005 T SQL 我发现了很多如何分割字符串的好解决方案 但是如何将内部 SELECT 的结果组合为字符串 例如 使用逗号分隔符 代码 SELECT b date SELECT o number FROM order o
  • 为什么 flutter 停止在 ios 上启动我的应用程序

    突然之间 我无法运行使用 firebase 的 flutter 应用程序 显然 pod 安装过程存在问题 某些依赖项不兼容 鉴于我没有更改 yaml 文件中的任何内容 并且应用程序今天早上运行良好 我认为工具存在问题 而不是我的源代码 这个
  • XAML WPF 中 {x:Static} 和 {StaticResource} 之间的区别

    有什么区别 x Static and StaticResource 在 WPF 的 XAML 代码中 例如
  • MySql 对视图列的注释?

    MySql 是否可以存储视图列的注释 我知道如何向普通表和列添加注释 但我不确定是否可以对视图这样做 我所知道的是视图 对于某些方面 的行为就像表一样 因此可以像这样运行查询 SELECT column name column commen
  • 捕获 Global.asax 中的错误

    我的中有以下内容Global asax这是为了处理错误 void Application Error object sender EventArgs e Exception exception Server GetLastError if
  • Android:重叠两个视图(故意的!)

    只是想知道是否可以重叠两个元素 这是我试图实现的目标的说明 基本上它是一个圆形的 ImageButton 其中心位于矩形的角上 我应该如何定位它 我可以使用RelativeLayout或其他东西吗 您可以对蓝色框使用相对布局 将 Image
  • Decimal.TryParse 不解析我的十进制值

    当我尝试转换类似 0 1 的值 来自文本框中的用户 时 我的值 b 始终为 false bool b Decimal TryParse 0 1 out value 怎么会来这里工作呢 指定解析的区域性 您当前的文化可能使用某种不同的数字格式
  • Scala 中闭包的内存管理是如何工作的?

    Scala 允许像这样的闭包 def newCounter var a 0 gt a 1 a 它定义了一个函数 每次调用时都会返回一个新的独立计数器函数 从1 scala gt val counter1 newCounter counter
  • 如何实现低通滤波器?

    我正在对陀螺仪和加速度计数据进行一些数学运算 我想对结果数据进行低通滤波 那么有人可以发布一些低通滤波器的通用代码吗 一阶 IIR 低通滤波器可以采用以下形式 output value rate input value 1 0 rate p
  • 在 iPad/iOS6.0 上使用“应用程序锁定”配置文件设置(又名“信息亭模式”)时出错

    背景 作为 iOS6 的一部分 Apple 为其 iPad 提供了一种 信息亭模式 该模式将设备锁定到一个应用程序中 甚至也可以直接启动到该应用程序中 非常适合在零售店 餐厅 等场所使用 iPad 为了使用此功能 首先必须使用 Apple
  • NoSQL:从表 DynamoDB/Azure 表存储获取最新值

    我有一个小问题需要一些建议 假设我们有几百个数据表 每个数据表有几千万行 数据表是时间戳 键 值 数据表每秒写入一次 每个表的最新条目应该可以快速获取 并且很可能被查询最多 有点像 实时跟踪数据 由于缺少 Last 或类似的内容 我正在考虑
  • 如何在左侧对 UITableViewCell 进行重新排序控制?

    我正在做一个新闻阅读器应用程序 我想让用户可以选择显示 隐藏新闻类别 例如热门新闻 商业 技术 体育等 并像 Android 中的 BBC 新闻应用程序一样重新排序 见下图 我的问题是 如何在单元格左侧进行重新排序控制 编辑模式下默认位置在