【问题标题】:popoverPresentationController's sourceView inside didSelectRowAtIndexPath in iPad in SwiftSwift 中 iPad 上 didSelectRowAtIndexPath 中的 popoverPresentationController sourceView
【发布时间】:2015-10-22 21:25:23
【问题描述】:

当用户单击 iPad 中的单元格时,我想显示 popoverPresentationController。这是我的代码:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if(indexPath.section == 0){
        if(indexPath.row == 0){
            let textToShare = NSLocalizedString("SHARE_MESSAGE", comment: "Message...")

            if let appStoreURL = NSURL(string: "http://www.google.com/") {
                let objectsToShare = [textToShare, appStoreURL]
                let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

                self.presentViewController(activityVC, animated: true, completion: nil)

                if let popView = activityVC.popoverPresentationController {
                    let v = tableView as UIView
                    popView.sourceView = v
                    popView.sourceRect = v.bounds
                }
            }
        }
    }
}

在 iPad 上是错误的(屏幕上没有显示)。那我该如何解决呢?

PS:这是 UIButton 的代码,它在 iPad 上运行良好(显示在屏幕上):

@IBAction func shareButtonAction(sender: AnyObject) {
    let textToShare = NSLocalizedString("SHARE_MESSAGE", comment: "Message...")

    if let appStoreURL = NSURL(string: "http://www.google.com/") {
        let objectsToShare = [textToShare, appStoreURL]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

        self.presentViewController(activityVC, animated: true, completion: nil)

        if let popView = activityVC.popoverPresentationController {
            let v = sender as! UIView
            popView.sourceView = v
            popView.sourceRect = v.bounds
        }
    }
}

【问题讨论】:

    标签: ios swift ipad uipopovercontroller didselectrowatindexpath


    【解决方案1】:

    您正在从整个 tableView 的框架中显示弹出框,所以我想它不在屏幕上。尝试从单元格的框架中显示它。

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if (indexPath.section == 0){
            if(indexPath.row == 0){
                let textToShare = NSLocalizedString("SHARE_MESSAGE", comment: "Message...")
    
                if let appStoreURL = NSURL(string: "http://www.google.com/") {
                    let objectsToShare = [textToShare, appStoreURL]
                    let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
    
                    self.presentViewController(activityVC, animated: true, completion: nil)
    
                    if let popView = activityVC.popoverPresentationController {
                        popView.sourceView = tableView
                        popView.sourceRect = tableView.cellForRowAtIndexPath(indexPath)!.frame
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      斯威夫特 5

       // Detect iPad
          if let popoverController = actionSheet.popoverPresentationController,
                  let indexPath = self.tableView.indexPathForSelectedRow,
                  let cell = self.tableView.cellForRow(at: indexPath) {
      
              popoverController.permittedArrowDirections = .left
              popoverController.sourceView = self.tableView
              popoverController.sourceRect = CGRect(x: cell.frame.width / 7, y: cell.frame.minY + 22, width: 1, height: 1)
          }
      

      【讨论】:

      • 神奇♥️!这应该是正确的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2015-04-29
      • 2015-06-15
      • 1970-01-01
      相关资源
      最近更新 更多