【问题标题】:Pass data to and from Popover in Swift在 Swift 中将数据传入和传出 Popover
【发布时间】:2015-02-03 00:08:53
【问题描述】:

在我当前的项目中,我的详细视图显示了我的表格视图中的特定记录。我有以下标签

@IBOutlet weak var vacationImageView: UIImageView!
@IBOutlet weak var percentSaved: UILabel!

@IBOutlet weak var cost: UILabel!
@IBOutlet weak var saved: UILabel!
@IBOutlet weak var circleProgressView: CircularProgressView!

@IBOutlet weak var daysDepart: UILabel!

我调用了一个弹出框,我想将 已保存 的当前文本值发送到我的弹出框,允许用户对其进行编辑并将其发送回视图。这是我的弹出框调用。

@IBAction func addPopover(sender: UIView) {
    let savingsInformationViewController = storyboard?.instantiateViewControllerWithIdentifier("SavingsAddPopover") as UIViewController
    savingsInformationViewController.modalPresentationStyle = .Popover
    savingsInformationViewController.preferredContentSize = CGSizeMake(200, 200)



    let popoverController = savingsInformationViewController.popoverPresentationController
    popoverController?.sourceView = sender
    popoverController?.permittedArrowDirections = .Any
    popoverController?.delegate = self




    presentViewController(savingsInformationViewController, animated: true, completion: nil)
}

我原以为我可以从弹出框引用数据对象,但不能……至少不是我想的那样。

【问题讨论】:

  • 看起来您正试图让 SavingInformationViewController 成为内容控制器。为什么不向该类添加一个属性来保存您的数据并在您以上面显示的方法实例化控制器后简单地分配它?许多弹出窗口示例显示了这种行为。
  • “无法引用”是什么意思?你是怎么尝试的?
  • 我试图引用我在调用popover的视图中使用的变量对象vacation.totalSaved
  • @TommieC。抱歉,我只是在学习 swift ..你能给我指出一个很好的 popover 例子吗
  • 当然 - 这是一个示例,展示了几种方法,包括仅使用带有准备转场的故事板和可用于以正常方式传递数据的故事板。 stackoverflow.com/questions/24635744/…。设置上述内容视图控制器类的属性可能更容易;即 var data:AnyObject?然后在上面定义的方法中使用 SavingInformationViewController.data = importantInfo 设置属性。在该视图控制器内的委托方法中,只需将数据发送到标签等。

标签: ios swift


【解决方案1】:
class ViewController: UIViewController,SavingViewControllerDelegate,UIPopoverPresentationControllerDelegate{

        @IBOutlet var labelText: UILabel!
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }

        @IBAction func buttonPopOverClick(sender: UIButton)
        {
            let savingsInformationViewController = storyboard?.instantiateViewControllerWithIdentifier("SavingsAddPopoverVC") as SavingViewController

            savingsInformationViewController.delegate = self
            savingsInformationViewController.strSaveText=labelText.text

            savingsInformationViewController.modalPresentationStyle = .Popover
            if let popoverController = savingsInformationViewController.popoverPresentationController {
                popoverController.sourceView = sender
                popoverController.sourceRect = sender.bounds
                popoverController.permittedArrowDirections = .Any
                popoverController.delegate = self
            }
            presentViewController(savingsInformationViewController, animated: true, completion: nil)
        }

        func saveText(strText: NSString) {
            labelText.text=strText
        }

        // MARK: - UIPopoverPresentationControllerDelegate
        func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle {
            return .FullScreen
        }

        func presentationController(controller: UIPresentationController!, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController! {
            return UINavigationController(rootViewController: controller.presentedViewController)
        }
    }


    protocol SavingViewControllerDelegate
    {
        func saveText(var strText : NSString)
    }

    class SavingViewController: UIViewController {
        @IBOutlet var textField: UITextField!
        var delegate : SavingViewControllerDelegate?
        var strSaveText : NSString!
        override func viewDidLoad() {
            super.viewDidLoad()
            textField.text = strSaveText
            // Do any additional setup after loading the view.
        }

        @IBAction func buttonDone(sender: UIButton)
        {
            if (self.delegate) != nil
            {
                delegate?.saveText(textField.text)
                self.dismissViewControllerAnimated(true, nil)
            }
        }
    }

【讨论】:

  • 这正是我所需要的。现在这很有意义。谢谢
  • 能否请您在 github 或其他地方为新手分享工作代码。
  • 当然伙计,我一有时间就去做。
【解决方案2】:

只是指出

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle {
            return .none
        }

在 ios 12 /xcode 11 上无法正常工作,至少对于 popover tableview 控制器而言

下面的调用有效

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
      return .none
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2018-10-28
    • 2013-05-01
    • 2014-07-17
    相关资源
    最近更新 更多