通过点击单元格内的图像从 UITableViewCell 中转出

2023-12-28

我已经尝试解决这个问题有一段时间了,经过几个小时的寻找解决方案后,我决定是时候问了。

我有一个由自定义 UITableViewCells 填充的表格视图,当前当您点击单元格时,它会将您带到详细视图。

自定义单元格内有一个图像,我希望用户能够点击该图像并转到显示该图像的弹出窗口 VC。

我遇到的问题是在点击图像时创建segue。

在自定义单元格的文件中,我在图像上设置了点击手势识别器(pTap):

override func awakeFromNib() {
    super.awakeFromNib()

    let tap = UITapGestureRecognizer(target: self, action: #selector(PostCell.voteTapped(_:)))
    let ptap = UITapGestureRecognizer(target: self, action: #selector(PostCell.imageTapped(_:)))
    tap.numberOfTapsRequired = 1
    ptap.numberOfTapsRequired = 1
    voteImage.addGestureRecognizer(tap)
    voteImage.userInteractionEnabled = true
    featuredImg.addGestureRecognizer(ptap)
    featuredImg.userInteractionEnabled = true


}

我在自定义单元格文件中还有一个用于水龙头的函数:

func imageTapped(sender: UIGestureRecognizer) {

  print("image tapped")


}

在我的视图控制器文件中,我在索引路径的 did select row 中添加了一个 segue:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let post: Post!

    if inSearchMode {
        post = filteredVenues[indexPath.row]
    } else {

        post = posts[indexPath.row]
    }

    print(post?.venueName)

    performSegueWithIdentifier("imageTapped", sender: nil)



    performSegueWithIdentifier("DetailsVC", sender: post)

}

另外,在故事板中,我创建了一个从 VC 到 VC 的 Segue,该 VC 保存带有自定义单元格的表格视图,到我想在点击图像时显示的 VC。

我尝试了几种不同的方法来使其工作,但没有任何运气,您在上面看到的代码是我多次失败的尝试后剩下的。我觉得自定义单元文件中的 tap 功能和 VC 文件中的 segue 是解决方案的一部分,所以这就是我保留它们的原因。

任何帮助,将不胜感激。谢谢!

更新以下答案中的代码:

添加协议

protocol ImageSegueProtocol: class {
    func imageTapped(row: Int)
}


class PostCell: UITableViewCell {

添加IAB功能

@IBAction func imageTapped(sender: UIGestureRecognizer) {
   guard let row = row else { return }
    delegate?.imageTapped(row)
    print("image tapped func")
}

在主 VC 中声明的委托

weak var delegate:postCell?

指定代表

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    //let post = posts[indexPath.row]

    if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {

        var img: UIImage?
        var vImg: UIImage?
        postCell?.delegate = self

新增扩展功能

extension FeedVC: ImageSegueProtocol {

func imageTapped(row: Int) {
    if inSearchMode == true {
        let object = filteredVenues[row]
        performSegueWithIdentifier("imageTapped", sender: object)
        print("ext func")
    } else {
        let object = posts[row]
        performSegueWithIdentifier("imageTapped", sender: object)
        print("ext func")
    }



}

你可以这样做:

在单元文件中,在顶部声明一个协议,然后在单元类本身和委托行为中设置一些属性,以响应被点击的图像:

protocol SomeCellProtocol: class {
    func imageTapped(row: Int)
}


class SomeCell: UITableViewCell {

    weak var delegate: SomeCellProtocol?
    var row: Int?

    @IBAction func imageTapped() {
        guard let row = row else { return }
        delegate?.imageTapped(row)
    }
}

然后,您必须让您的 ViewController 采用 SomeCellProtocol 并在其中调用 segue,如下所示:

extension SomeViewController: SomeCellProtocol {

    func imageTapped(row: Int) {
        //get object from array and call segue here
    }
}

并且您必须通过调用以下命令将 ViewController 设置为单元格的委托:

someCell.delegate = self

并将行传递到单元格:

someCell.row = indexPath.row

在 ViewController 的 cellForRowAtIndexPath 方法中。

因此,当在单元格内点击按钮时(或者如果需要,您可以使用 ImageView 上的 GestureRecognizer 来完成),它将强制委托(ViewController)调用其 imageTapped 函数,并传递一个行参数,您可以使用该参数确定表中的哪个对象(其相应的数据数组)应通过 Segue 传递。

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

通过点击单元格内的图像从 UITableViewCell 中转出 的相关文章

  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • UICollectionView 设置列数

    我刚刚开始学习 UICollectionViews 我想知道是否有人知道如何指定集合视图中的列数 默认设置为 3 iPhone 肖像 我查看了文档 似乎找不到简洁的答案 对于 Swift 5 和 iOS 12 3 您可以使用4 以下实现为了
  • iOS 何时清理本地应用程序 ./tmp 目录?

    iOS什么时候清理本地应用程序 tmp目录 请注意 这不是一个骗局这个问题 https stackoverflow com questions 3593900 iphone storage in tmp directory 我问的是应用程序
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 单击按钮时退出应用程序 - iOS [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 4 0 中退出应用程序 https stackoverflow com questions 3097244 exit application in ios 4 0 我有一个 AlertView
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 无法在 xcode 8 beta 6 上编译 AWS CustomIdentityProvider

    我在 iOS 应用程序中使用 Amazon Cognito 和 Facebook 登录 直到 beta 5 为止此代码从这个SO线程 https stackoverflow com questions 37597388 aws cognit
  • 从字典创建 Swift 对象

    如何根据 Swift 字典中的查找值动态实例化类型 希望这对其他人有用 我们需要进行一些研究才能弄清楚这一点 目标是避免巨大的 if 或 switch 语句从值创建每个对象类型的反模式 class NamedItem CustomStrin
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • 广告标识符和标识符ForVendor返回“00000000-0000-0000-0000-000000000000”

    我已经实现了这个方法来获得advertisingIdentifier and identifierForVendor NSString advertisingIdentifier if NSClassFromString ASIdentif
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • Swift PageControl 当前页面上更大的点

    我试图将当前页面的点缩放为大于未 选择 的点 我正在使用滚动视图委托来确定哪个页面是当前的 目前 点的大小没有变化 我将如何实现这一目标 func scrollViewDidEndDecelerating scrollView UIScro
  • iPhone Dev:从子控制器和 TabBar 中的另一个控制器重新加载表视图的数据

    我正在实现一个笔记管理器应用程序 它在 tabBar 中有一个 tableView 其中显示其笔记的主要信息 访问一个注释时 您可以编辑其属性 在 tabBar 的一个按钮中 您可以选择注释在 tableView 中的显示方式 我遇到的问题
  • Swift 中通过可选绑定进行安全(边界检查)数组查找?

    如果我在 Swift 中有一个数组 并尝试访问超出范围的索引 则会出现一个不足为奇的运行时错误 var str Apple Banana Coconut str 0 Apple str 3 EXC BAD INSTRUCTION 但是 我会
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 如何在 SwiftUI 中延迟动画?

    我想为两个文本字段设置动画 第二个字段有延迟 但它不起作用 没有延迟 它们同时从位置 100 动画到 0 这是代码 State private var offset CGFloat 100 State private var offset2
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • 带有自定义字体的 UILabel 错误呈现

    在我的 iPhone 应用程序中 我为所有 UILabel 设置了自定义字体 更准确地说 我对 UILabel 进行了子类化 重写了一个方法 在该方法中设置了自定义字体 然后将 IB 中的所有标签设置为该自定义类 现在的问题是 所有文本都渲

随机推荐

  • Angular2 - ContentChild 查询找不到嵌套组件

    我正在尝试设置一个 Angular2 组件 该组件自动聚焦通过内容投影插入的输入元素 我使用的解决方案基于这个答案 https stackoverflow com a 34503163 1592971 我还有一个额外要求 即输入元素可以嵌套
  • 如何检查服务器是否发送垃圾邮件?

    我今天检查了我的 IP 地址 因为我收到了退回的电子邮件 并且我发现它已被列入一些列表的黑名单 我只使用我的网站发送客户电子邮件 不发送时事通讯电子邮件 所以我不会发送很多电子邮件 我不知道为什么我的专用IP地址会被列入黑名单 有没有办法检
  • 如何检查是否安装了 .net for excel 互操作性

    我在代码中使用 net Primary Interoperability Assembly for Excel 但是 该应用程序可以在未安装 net PIA for Excel 的计算机上运行 我想如果没有安装就给出错误信息 即使我正在检查
  • FAILED_NOT_VISIBLE 负载平衡中 Google 管理的 SSL 证书

    我正在与负载平衡合作 将 https 连接到我的静态网站 并且我在 GoDaddy 中拥有我的域名 在初始阶段 我只有 Http 所以我用指向 c storage googleapis com 的 cname 绘制了我的域名 并用域名进行存
  • Google 地图 API 函数 map.getCenter()

    当用户调整地图时 我将 Google Map API 设置的缩放和位置保存在 cookie 中 当他们回来时 地图位于同一个地方 该函数大部分时间都有效 var h JSON stringify map getCenter null 2 j
  • 无法将 FFmpeg C 库移植到 android 中

    我到底想要做什么 访问ffmpeg c文件来修改int main int argc char argv 功能为JNI并将 ffmpeg 命令作为字符串传递 我尝试将 ffmpeg C 库移植到 android ARM 处理器 我遵循了不同的
  • 新部署上的 System.Web.AspNetHostingPermission 异常

    我有一个朋友正在将 Web 应用程序从一台服务器转移到另一台服务器 新服务器的设置与第一台服务器相同 但是 他遇到了安全问题 这是错误详细信息 请求 System Web AspNetHostingPermission System Ver
  • 为我的 MVC 应用程序创建服务层?

    据我了解 MVC 通过控制器这一 粘合剂 将类定义 模型 与表示 视图 分开 控制器应该有单一的职责 因此是可测试的 ViewModel 用于将来自多个实体的数据汇集在一起 并 按摩 来自视图控制器的数据 似乎业务逻辑并没有真正占有一席之地
  • 父 MOC 从子 MOC 获取空数据的更改

    我陷入了 CoreData 和父子 MOC 的这个问题 将对象添加到子 MOC 保存它们并保存父 MOC 时 所有对象的属性都会重置为 defaultValue 我在此处粘贴了两个 MOC 的日志 特别是这些日志中重置的 stringAtt
  • 如何为 Hanami 应用程序配置 Puma?

    我有一个 Hanami 1 3 3 应用程序 它应该与 Puma 作为生产网络服务器一起运行 我想在集群模式下使用 puma 并正确使用 preload app 现在我正在努力寻找正确的 Puma 配置 我知道 每个子进程 工作进程 都必须
  • 如何检测未使用的宏定义和 typedef?

    通过链接器反馈很容易获得未使用的函数和变量的列表 但如何检测这些未使用的宏定义和 typedef 我必须在整个项目中逐行浏览代码和 git grep 吗 对于源文件中定义的宏 您可以尝试 Wunused macrosgcc clang 标志
  • 选择排序从两端开始增长有序范围

    我编写了选择排序的修改版本 其中我考虑数组的最小值和最大值并将它们放在两端 该算法的工作原理如下 1 Find the minimum and the maximum value in the list 2 Swap the minimum
  • PHP串口数据从Arduino返回

    我想知道是否有一种方法可以通过 PHP 读取我的串行端口 有效 在练习 Arduino 技能时 我开发了一个简单的 LED 开 关草图 它的工作原理是输入on or off在串行监视器中 下一步 我整理了一个网页作为 GUI 界面 用于单击
  • 预期响应为 <:redirect>,但实际响应为 <200>

    我的 rspec 测试遇到问题 浏览了之前的问题后我无法解决它 测试失败并出现上述错误 但代码在实践中有效 有谁知道如何解决这个问题 Rspec describe authentication of edit update pages do
  • 请求运行时权限时出现java.lang.StackOverflowError

    我创建了一个公共类PermissionManager为了从一个地方管理所有权限 通常它工作正常 但上传后它显示崩溃分析的错误报告我无法重现 详细信息如下所述 Fatal Exception java lang StackOverflowEr
  • 无法关闭 Matplotlib 中的科学计数法[重复]

    这个问题在这里已经有答案了 我使用以下代码在 Matplotlib Python 中绘制一个简单的图 temp np array 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 99999999 0 99999999 0 999
  • 多个 Eclipse IDE 应用程序未显示在 Launchpad 上

    我需要有关 Launchpad 上 Eclipse IDE 的帮助 我有 Mac OS X Yosemite 并且下载了 Eclipse IDE Java PHP 和 C C 在我提取 Eclipse IDE Java 并将其拖放到我的应用
  • 无法使用 VS 2022 调试 WSL2 - 无效的“cwd”值

    我尝试在 Windows 中使用 VS 2022 IDE 从 WSL2 进行调试 但出现以下错误 cwd 值确实看起来错误 但如何修复它 我正在使用 netcore 6 0 101 Ubuntu 20 04 3 和 Windows 11 启
  • 垂直对齐在内联块中不起作用

    我想将文本垂直居中 但是 这行不通 当我将文本放入内联块中时 我应该能够将文本垂直居中 对吧 为什么这段代码不起作用 我怎样才能使它起作用 请帮帮我 先感谢您 HTML ul class socialBlock li class socia
  • 通过点击单元格内的图像从 UITableViewCell 中转出

    我已经尝试解决这个问题有一段时间了 经过几个小时的寻找解决方案后 我决定是时候问了 我有一个由自定义 UITableViewCells 填充的表格视图 当前当您点击单元格时 它会将您带到详细视图 自定义单元格内有一个图像 我希望用户能够点击