如何在没有 segue 和 storyboard 编程的情况下传递数据?

Posted

技术标签:

【中文标题】如何在没有 segue 和 storyboard 编程的情况下传递数据?【英文标题】:How to pass data without segue and storyboard programming? 【发布时间】:2017-02-22 09:12:46 【问题描述】:

我想将数据从 vc1 传递到 vc2。

vc1 有很多按钮。 vc2 有许多元素,并检测用户按下显示不同元素的按钮。 所以,我只写了两个 .swift 文件来改变不同的 UI。

vc1:

let vc2 = vc2()

func buttonClick(sender:UIButton)

    switch sender 

    case button1:
        vc2.data = "name"
        present(vc2, animated: true, completion: nil)
        break

    case button2:
        vc2.data = "photo"
        present(vc2, animated: true, completion: nil)
        break

    default:
        print("default")
    

vc2:

    var data:NSString = ""

  override func viewDidLoad() 
    super.viewDidLoad()

    print("data is here : \(data)")

    switch data 

    case "name":
    print("here is button1View")
        break
    case "photo":
    print("here is button2View")
        break
    default:
    print("default View")
    


打印数据为空。 我应该如何处理这个想法?

【问题讨论】:

又是什么问题?什么不工作? var data:NSString = "",这个不对,写成var data:NSString?在当前场景中,您正在初始化数据变量 我知道。如何传递数据? 将你的代码从viewDidLoad移动到viewWillAppear 你为什么不简单地为VC2添加一个初始方法并将数据作为参数传递。例如init(data: NSData?) 【参考方案1】:

这个问题看起来你没有初始化 vc2,所以我给你写了一个例子,它对我有用

    @IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()



override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()


@IBAction func buttonClick(_ sender: UIButton) 
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc2 = storyboard.instantiateViewController(withIdentifier :"vc2") as! vc2
    switch sender 

    case button1:
        vc2.data = "name"
        present(vc2, animated: true, completion: nil)
        break

    case button2:
        vc2.data = "photo"
        present(vc2, animated: true, completion: nil)
        break

    default:
        print("default")



和vc2

    var data:NSString = ""


override func viewDidLoad() 
    super.viewDidLoad()

    print("data is here : \(data)")

    switch data 

    case "name":
        print("here is button1View")
        break
    case "photo":
        print("here is button2View")
        break
    default:
        print("default View")
    


【讨论】:

【参考方案2】:

在 vc1 中试试这个

 let vc2 = UIStoryboard(name: "storeyBoardID", bundle: nil).instantiateViewController(withIdentifier: "stroyboardIdOfcontroller") as? viewController2

vc2.data = "name"

和vc2这样声明数据变量

var data:NSString?

希望对你有帮助

【讨论】:

以上是关于如何在没有 segue 和 storyboard 编程的情况下传递数据?的主要内容,如果未能解决你的问题,请参考以下文章

启动屏幕可能没有触发 segue。 (LaunchScreen.storyboard)

加载没有 Segue 的视图表单 StoryBoard

没有 Storyboard 或 XIB 的 UIViewControllers 之间的 Segue

IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?

使用没有 Storyboard Segues 的 UIViewControllerAnimatedTransitioning

iOS如何获取对带有segue的storyboard容器中嵌入的视图控制器的引用?