Xcode Swift 将字符串从弹出窗口视图传递到主视图 VC
Xcode Swift pass String from popover view to main VC
我正在尝试将 popOverViewController
中字符串中的数据作为字符串传递回我的 mainVC。但我不知道该怎么做,所以请帮助任何人。
我的 mainVC segue 函数:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
我的 popOverVC:
我正在尝试将 valueSelected 传递回 mainVC
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
@IBOutlet weak var picker: UIPickerView!
@IBAction func pickButton(sender: AnyObject?) {
// need to send valueSelected back to previous navigated view
print("Value: ", valueSelected)
dismissViewControllerAnimated(true, completion: nil)
}
need to send valueSelected
string back to previous navigated view.
如果你想使用委托
添加协议
protocol SelectDelegate: NSObjectProtocol {
func select(_ string: String)
}
给popOverVC添加弱类型Delegate,并在dismissViewController之前使用
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
weak var delegate: SelectDelegate?
@IBOutlet weak var picker: UIPickerView!
@IBAction func pickButton(sender: AnyObject?) {
print("Value: ", valueSelected)
//added Line
delegate?.select(valueSelected)
dismissViewControllerAnimated(true, completion: nil)
}
对 MainVC 实施 SelectDelegate
class MainVC {
. . .
func select(string: String) {
//doSometing popupVC's string
}
}
将 popOverVC 的委托分配给 mainVC
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
// added Line
popoverViewController.delegate = self
}
}
为此,您可以在 swift 中使用 closures
。以下是如何做到这一点:
FirstViewController.swift
class FirstViewController: UIViewController
{
override func viewDidLoad()
{
}
@IBAction func onButtonTap(_ sender: UIButton)
{
self.performSegue(withIdentifier: "popoverSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "popoverSegue"
{
let popoverViewController = segue.destination as!PopOverViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverViewController.popoverPresentationController!.delegate = self
popoverViewController.completionHandler = {(valueSelected : String?) in
if let valueSelected = valueSelected
{
print(valueSelected)
//Write yout code here
}
}
}
}
}
PopOverViewController.swift
class PopOverViewController: UIViewController
{
var completionHandler : ((String?)->(Void))?
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
@IBAction func pickButton(_ sender: UIButton)
{
print("Value: ", valueSelected)
self.dismiss(animated: true, completion: {[weak self] in
if let handler = self?.completionHandler
{
handler(self?.valueSelected)
}
})
}
}
我正在尝试将 popOverViewController
中字符串中的数据作为字符串传递回我的 mainVC。但我不知道该怎么做,所以请帮助任何人。
我的 mainVC segue 函数:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
我的 popOverVC:
我正在尝试将 valueSelected 传递回 mainVC
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
@IBOutlet weak var picker: UIPickerView!
@IBAction func pickButton(sender: AnyObject?) {
// need to send valueSelected back to previous navigated view
print("Value: ", valueSelected)
dismissViewControllerAnimated(true, completion: nil)
}
need to send
valueSelected
string back to previous navigated view.
如果你想使用委托
添加协议
protocol SelectDelegate: NSObjectProtocol {
func select(_ string: String)
}
给popOverVC添加弱类型Delegate,并在dismissViewController之前使用
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
weak var delegate: SelectDelegate?
@IBOutlet weak var picker: UIPickerView!
@IBAction func pickButton(sender: AnyObject?) {
print("Value: ", valueSelected)
//added Line
delegate?.select(valueSelected)
dismissViewControllerAnimated(true, completion: nil)
}
对 MainVC 实施 SelectDelegate
class MainVC {
. . .
func select(string: String) {
//doSometing popupVC's string
}
}
将 popOverVC 的委托分配给 mainVC
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
// added Line
popoverViewController.delegate = self
}
}
为此,您可以在 swift 中使用 closures
。以下是如何做到这一点:
FirstViewController.swift
class FirstViewController: UIViewController
{
override func viewDidLoad()
{
}
@IBAction func onButtonTap(_ sender: UIButton)
{
self.performSegue(withIdentifier: "popoverSegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "popoverSegue"
{
let popoverViewController = segue.destination as!PopOverViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverViewController.popoverPresentationController!.delegate = self
popoverViewController.completionHandler = {(valueSelected : String?) in
if let valueSelected = valueSelected
{
print(valueSelected)
//Write yout code here
}
}
}
}
}
PopOverViewController.swift
class PopOverViewController: UIViewController
{
var completionHandler : ((String?)->(Void))?
var pickerString = NSArray() as AnyObject as! [String]
var valueSelected = String()
@IBAction func pickButton(_ sender: UIButton)
{
print("Value: ", valueSelected)
self.dismiss(animated: true, completion: {[weak self] in
if let handler = self?.completionHandler
{
handler(self?.valueSelected)
}
})
}
}