【发布时间】:2017-02-16 16:59:14
【问题描述】:
在这种情况下,我有标签栏控制器和导航控制器之间 两个 VC,这意味着首先我想在第一个 VC 和标签栏控制器之间传递数据,其次我想将相同的数据从标签栏控制器传递到导航控制器,最后到最后一个 VC,例如我在网,但我没有发现任何有用的东西。
请你帮我在这两个视图控制器之间传递数据,任何例子都会很棒,谢谢。
【问题讨论】:
标签: ios swift visual-c++ storyboard viewcontroller
在这种情况下,我有标签栏控制器和导航控制器之间 两个 VC,这意味着首先我想在第一个 VC 和标签栏控制器之间传递数据,其次我想将相同的数据从标签栏控制器传递到导航控制器,最后到最后一个 VC,例如我在网,但我没有发现任何有用的东西。
请你帮我在这两个视图控制器之间传递数据,任何例子都会很棒,谢谢。
【问题讨论】:
标签: ios swift visual-c++ storyboard viewcontroller
在情节提要中为 segue 设置标识符(单击 segue,然后在右侧菜单上转到属性检查器)然后您可能需要单击单元格以在 didSelectRowAt 中创建 segue,在那里:
self.performSegue(withIdentifier: "YOUR IDENTIFIER", sender: DATA TO PASS or nil)
然后创建segue函数
override func prepare(for segue: UIStoryboardSegue, sender: Any!){
if (segue.identifier == "YOUR IDENTIFIER") // good to have if you have multiple segues
{
let secondVC = segue.destination as! SecondViewController
secondVC.str = "DATA" // now you can access public variables and functions from the second viewController
}
}
【讨论】:
sender: The object that initiated the segue. You might use this parameter to perform different actions based on which control (or other object) initiated the segue. 这不应该用来传递数据
您可以使用@Rashwan L 答案,并在所有控制器之间传递信息直到最后一个,或者只是在 AppDelegate 中创建一个变量并在所需控制器到达时使用它。
var App: AppDelegate {
return (UIApplication.sharedApplication().delegate as! AppDelegate)
}
App.myVar = "My DATA"
使用时可以通过App.myVar获得
【讨论】:
我一直试图弄清楚这一点。目前,我在调用performSelector: 之前创建了一个属性来保存我想要传递的数据,然后使用该属性将数据传递到prepareForSegue: 中的适当视图控制器中。使用后,我将数据归零。看起来像这样
@property (...) NSString *selectedString;
- (void)methodThatPicksTheData {
self.selectedString = @"someString";
[self performSegue:kSegueIdentifier];
}
- (void)prepareForSegue:(SegueClassWhoseNameICannotRememberRightNow)segue {
if ([segue.identifier isEqualToString:kSegueIdentifier]) {
CustomViewController *vc = segue.destinationViewController;
vc.string = self.selectedString;
self.selectedString = nil;
}
}
它并不完美,但它提供了一种明确指定需要传递哪些数据的方法。
【讨论】: