在ios中点击手机附件时如何获取数据

Posted

技术标签:

【中文标题】在ios中点击手机附件时如何获取数据【英文标题】:how to get data when cell accessory is tapped in ios 【发布时间】:2019-03-04 14:13:52 【问题描述】:

我的 tableview 有几个单元格,当用户点击单元格时,它会执行一些其他功能,当点击单元格附件时,我希望它与另一个视图控制器连接 我可以这样做,但问题是我无法在单元格索引路径行发送数据,为了发送数据我首先必须触摸单元格然后点击附件发送数据这里是 tableview 的代码

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) 
    myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    switch segue.identifier 
    case "ShowDetail":
        if let ip = myTableView.indexPathForSelectedRow
            if let svc = segue.destination as? DetailViewController
                svc.selectedObject = (myCounters?[ip.row])!
            
        
    default:
        print("error in segue")
    

【问题讨论】:

你在哪里调用performSegue方法? 我没有调用执行 segue,我正在使用为 segue 做准备,我也尝试执行 segue 并尝试通过发件人发送值,但这也没有用 首先:如果您的目标是执行不同的功能而不是选择单元格,那么在accessoryButtonTappedForRowWith 中调用myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) 对我来说似乎很奇怪。第二:我假设您的代码中某处有一个performSegue。您说“执行 segue 并尝试通过 sender 发送值,但这也不起作用”,您能解释一下如何吗? 在执行 segue 时,我们首先有 2 个占位符,我在第二个写 segue 标识符,我在写 indexpath.row 我建议提供 perform segue 的代码并提及问题,如果我做对了,您应该使用 perform segue 来实现它... 【参考方案1】:
func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) 
    let vc = storyboard?.instantiateViewController(withIdentifier: "detailvc") as? DetailViewController
vc?.selectedObject = (myCounters?[indexPath.row])!
navigationController?.present(vc!, animated: true, completion: nil)

【讨论】:

就像我这次选择第一个单元的附件一样,它会打开一个没有任何内容的控制器,当我关闭该控制器时,我又回到了前一个控制器,这里唯一的新东西是我点击了附件的那个单元这次被选中,所以现在如果我按下任何单元格的附件,第一个单元格的数据将传递给视图控制器 以编程方式执行 segue 我已经编辑了我的答案,你应该从情节提要中删除 segue。 如果它仍然不起作用,您可以使用 storyboardId 实例化控制器并呈现或推送它.. 与实例化视图控制器相同,我没有崩溃,只是显示带有标签和按钮的视图控制器没有值【参考方案2】:

感谢@shahzaib qureshi 我删除了 segue 连接并使用实例化视图控制器方法作为单元附件点击方法中的详细视图控制器

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) 
    let vc = storyboard?.instantiateViewController(withIdentifier: "detailvc") as? DetailViewController
    vc?.selectedObject = (myCounters?[indexPath.row])!
    navigationController?.present(vc!, animated: true, completion: nil)
    print("ewwewew")

【讨论】:

编辑您的答案以更正,我会支持它,谢谢【参考方案3】:

只需在sender参数中传递索引路径,非常简单:

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath)  
    performSegue(withIdentifier: "ShowDetail", sender: indexPath) 
 

override func prepare(for segue: UIStoryboardSegue, sender: Any?)  
   if segue.identifier == "ShowDetail"  
       let indexPath = sender as! IndexPath
       let svc = segue.destination as! DetailViewController
       svc.selectedObject = myCounters![indexPath.row]
   
 

【讨论】:

我试过没有用我已经给出了我的答案它的工作【参考方案4】:

试试这个,

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) 
        print("Index : \(indexPath.row)")

    var tempIndex: Int!
    var tempIdentifier: String!

    self.tempIndex = indexPath.row //You can store indexpath.row value in temp variable. And then then you can access it while performing any other functions.
    self.tempIdentifier = "ShowDetail" //This upto your needs.

//UIStoryboardSegue 相应地移动到另一个控制器上。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    switch segue.identifier 
    case "ShowDetail":
        if let ip = myTableView.indexPathForSelectedRow
            if let svc = segue.destination as? DetailViewController
                svc.selectedObject = (myCounters?[tempIndex])!
            
        
    default:
        print("error in segue")
    

【讨论】:

以上是关于在ios中点击手机附件时如何获取数据的主要内容,如果未能解决你的问题,请参考以下文章

IOS swift如何在标签点击时在TableView中获取标签文本

如何在ios中从手机中获取所有图像

如何在用户未点击通知提醒时获取通知数据只需使用obj c点击ios中的应用程序[复制]

iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

当用户不点击通知警报时如何获取通知数据只需使用obj c点击ios中的应用程序[重复]

打开电子邮件附件时如何获取文件名和扩展名