如何为 UITableViewCell 显示自定义 UIMenuItem?

2023-11-30

我希望当我长按 UITableViewCell 时弹出 UIMenuController 以显示自定义 UIMenuItems。

我在 viewDidLoad 中设置了自定义项目

UIMenuItem *testMenuItem = [[UIMenuItem alloc] initWithTitle:@"Test" action:@selector(test:)];
[[UIMenuController sharedMenuController] setMenuItems: @[testMenuItem]];

然后我设置了所有正确的委托方法。

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

-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    return (action == @selector(copy:) || action == @selector(test:));
}

- (BOOL)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    if (action == @selector(copy:)) {
         // do stuff
    }

    return YES;
}

但它所做的只是显示“复制”项目,因为我只允许它和我的自定义项目。但是,自定义项目不会显示。

我意识到,我可以向单元格本身添加一个手势识别器,但这违背了 UIMenuController 共享实例的目的,不是吗?


据我了解,主要有两个问题:

1)你期望tableView canPerformAction:支持自定义选择器,而文档说它仅支持其中的两个UIResponderStandardEditActions(复制和/或粘贴);

2)不需要该部分|| action == @selector(test:)当您通过初始化添加自定义菜单选项时menuItems财产。对于此项目选择器,检查将自动进行。

您可以执行以下操作来显示自定义菜单项并进行工作:

1) 修复表视图委托方法

a)

UIMenuItem *testMenuItem = [[UIMenuItem alloc] initWithTitle:@"Test" action:@selector(test:)];
[[UIMenuController sharedMenuController] setMenuItems: @[testMenuItem]];
[[UIMenuController sharedMenuController] update];

b)

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

-(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    return (action == @selector(copy:));
}

- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
    // required
}

2)设置单元格(子类化UITableViewCell) with

-(BOOL) canPerformAction:(SEL)action withSender:(id)sender {
    return (action == @selector(copy:) || action == @selector(test:));
}

-(BOOL)canBecomeFirstResponder {
    return YES;
}

/// this methods will be called for the cell menu items
-(void) test: (id) sender {

}

-(void) copy:(id)sender {

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

如何为 UITableViewCell 显示自定义 UIMenuItem? 的相关文章

随机推荐

  • 如何设置环境变量 R_user 以在 python 中使用 rpy2

    我无法在 python 中运行 rpy2 用这个代码 import rpy2 robjects as robjects 以下是完整的例外情况 运行时错误 R USER 未定义 文件 d py r r python py 第 1 行 位于 i
  • 无法在 swift 中重载 viewDidLoad() 中的函数

    无法重载函数viewDidLoad 迅速 它给出了错误definition conflict with previous value at func joinString strings String gt String override
  • Mac Office 2011 VBA 和 Dylib

    我正在 Mac OS 中开发 Word 2011 插件 目前 我需要在 VBA 宏中编写代码以从另一个应用程序检索字符串 通过套接字通信 因此 基本上在 Windows 中 我可以简单地创建一个 DLL 它可以帮助我与其他应用程序进行 So
  • Google 报告 API V4 问题

    我只是用 python 来了解 Google Analytics Reporting API 并一直在尝试让他们的演示文件工作并提取一些数据 完整的示例代码可以在这里找到 https developers google com analyt
  • Spring新事务与Retryable相结合

    如果我有一个方法 对于某个异常有 Spring 可重试 并且还有一个 Transactional Requires new 那么每次重试完成时 它会创建一个新事务还是使用现有事务 ie Retryable maxAttempts 5 bac
  • 为什么“吞食”文件不是一个好习惯?

    为什么 slurping 文件对于普通文本文件 I O 来说不是一个好的做法 它什么时候有用 例如 为什么我不应该使用这些 File read path to text txt lines each do line do something
  • 如何在recyclerview中从Firebase数据库中从下到上检索数据或如何在Firebase中的数据库顶部添加数据?

    我正在开发一个带有 Firebase 数据库的应用程序 我正在接收数据并上传它 这没有问题 但我想将数据添加到数据库数组的顶部 而不是数据库数组的底部 因此 建议我一些可以帮助我从下到上检索数据的东西 或者我可以将其上传到数据库数组的顶部
  • lxml html5parser 忽略“namespaceHTMLElements=False”选项

    The lxml html5解析器似乎忽略了任何namespaceHTMLElements False我传递给它的选项 它将我提供给它的所有元素放入 HTML 命名空间中 而不是 预期的 void 命名空间中 这是一个重现该问题的简单案例
  • CsvHelper :使用 CsvHelper 添加标题

    我正在使用 CsvHelper 将 dapper 对象转换为 CsvFiles 我正在使用类映射来映射索引和名称映射的属性 问题是我需要带有表格标题的行在写入记录之前 如下所述 我的旧代码没有标题 using var writer new
  • 延迟一些 jQuery 函数,直到所有图像完全加载

    如何延迟某些 jQuery JavaScript 函数 直到页面上的所有图像完成加载 实际上 我所说的 jQuery 函数是用于设置 div 的偏移位置 问题是图像完全加载后页面会调整大小 因此偏移量是错误的 对于 jQuery 函数 请参
  • 在android中解析CDATA

    我正在解析服务器上的 XML 我读取并解析它 没有任何错误 但我看不到数据 这是我的 XML
  • MKMapView 缩放和区域

    我熟悉使用 Google Maps Javascript API 最近我开始在 iphone 项目中使用 MapKit 框架 但我很难弄清楚缩放和在地图上设置区域 在 Google Maps API 中 我曾经使用整数缩放级别 如 8 9
  • 使用 poltergeist 和代理?

    我正在使用 PhantomJS 和 poltergeist 来模拟浏览器 但是我不确定如何指定在代码中使用的代理 require capybara require capybara dsl require capybara polterge
  • 如何在Windows 8.1中获取WPF窗口的标题栏颜色?

    要使用 WindowChrome 类自定义窗口的外观 我想获取 Windows 8 1 中 WPF 窗口的标题栏颜色 首先 我尝试过 SystemParameters WindowGlassColor 但这个属性却不包括正确的alpha值
  • Phonegap 对图像进行 base64 编码

    我正在尝试将图像编码为 Base64 并将其发送到服务器 当我检索图像时 它显示的所有内容都是空白 我用来编码它的代码是这样的 encodeImageUri function imageUri var c document createEl
  • Python搜索字符模式,如果存在则缩进

    我有一个文本模式 我想找到它并推到新行 模式是 后面跟着一个空格和一个字符 像这样 text orig text cat dog cat dog text rabbit cat dog text coffee cat dog need to
  • Java邮件如何根据条件自动发送电子邮件

    以前没用过Java邮件 在我的 JSF Web 应用程序中 我有一个实体 followUp 有财产private Date checkDate 对应于一个Animal实体 一个动物有很多后续记录 否则 用户必须每 3 个月创建一条新记录 f
  • 关闭 UIImagePickerController

    我尝试了各种关闭 UIImagePickerController 的方法 但没有任何运气 我究竟做错了什么 IBAction choosePhoto self picker UIImagePickerController alloc ini
  • 将元组列表转换为列表列表

    我编写了这个函数来将元组列表转换为列表列表 有没有更优雅 Pythonic 的方法来做到这一点 def get list of lists list of tuples list of lists for tuple in list of
  • 如何为 UITableViewCell 显示自定义 UIMenuItem?

    我希望当我长按 UITableViewCell 时弹出 UIMenuController 以显示自定义 UIMenuItems 我在 viewDidLoad 中设置了自定义项目 UIMenuItem testMenuItem UIMenuI