如何在视图控制器之间传递数据而不在 ios 中使用 segue?

Posted

技术标签:

【中文标题】如何在视图控制器之间传递数据而不在 ios 中使用 segue?【英文标题】:How to pas data between view controller without using segue in ios? 【发布时间】:2015-08-11 06:56:36 【问题描述】:

大家好,

我正在使用以下代码从一个视图控制器移动到另一个视图控制器。

UIStoryboard  *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];
[self.navigationController pushViewController:vc animated:YES];

现在我想将一些数据从一个视图控制器传递到另一个视图控制器,比如某个变量。我有这段代码来完成这项任务,但我没有创建另一个视图控制器的实例。我正在使用情节提要启动另一个视图控制器。

SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
secondViewController.str1 = str;
[self.navigationController pushViewController:secondViewController animated:YES];

请告诉我如何以我的方式在视图控制器之间传递数据?

解决方法无效NSString 贴在 .h 文件中。

@property (nonatomic, strong) NSString *UserId;

在 .m 文件中合成

@synthesize UserId;

导航代码

 UIStoryboard  *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];
  vc.UserId=@"abc";
 [self.navigationController pushViewController:vc animated:YES];

vc.UserId 无法识别。

【问题讨论】:

请在提问前尝试谷歌。与***.com/questions/5210535/… 重复 【参考方案1】:

您可以借助属性在两个 ViewControler 之间传递数据。 首先在 RoloBusinessCard.h ViewControler 中创建这样的属性

@property (nonatomic, strong) NSString *str1;

在这个类的.m文件中这样合成

@synthesize str2;

现在你可以像这样传递值

UIStoryboard  *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];
vc.str2=str2
[self.navigationController pushViewController:vc animated:YES];

如果您无法在 RoloBusinessCard 中获取 str2

首先将 UIViewController 替换为您的 Viewcontroller 名称,如下所示

RoloBusinessCard *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];

像这样输入 UIViewController

UIStoryboard  *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];

(RoloBusinessCard *)vc1=vc
    vc1.str2=str2
    [self.navigationController pushViewController:vc1 animated:YES];

希望对您有所帮助。

【讨论】:

无法在我的视图控制器中获取“str1”作为字符串。我已将其设为属性并合成它。但它对我不起作用。@chakshu 编辑了我的答案,请检查。如果您认为正确,请接受我的答案。谢谢【参考方案2】:

尝试这样,希望它会工作。

UIStoryboard  *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
SecondViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RoloBusinessCard"];
vc.str1 = str;
[self.navigationController pushViewController:vc animated:YES];

【讨论】:

【参考方案3】:

这里我们只是使用导航堆栈将数据传递给下一个控制器

在第二个视图控制器中创建一个属性

@property (nonatomic, strong) NSString *yourString;

在firstView控制器动作方法中 您将在 push 方法上创建的视图控制器对象 do

-(void)btnAtion
object.yourstring = txtyourfirstvcObject.text

在 swift 中,我们也可以这样做

假设我们想将一个 Bool 值传递给下一个控制器,以便我们可以这样做:

Class ToViewController : UIViewController 
      public var isSelected : Bool? 


Class FromViewController : UIViewController 

    @IBAction func onClickFlyingFrom(_ sender: UIButton) 
         let tvc = self.storyboard?.instantiateViewController(withIdentifier: "ToViewController") as! ToViewController
         tvc.isSelected = true
         self.navigationController?.present(vc, animated: true, completion: nil)
    

【讨论】:

以上是关于如何在视图控制器之间传递数据而不在 ios 中使用 segue?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS SDK 中使用 presentViewController 在视图控制器之间传递变量?

在 xamarin.ios 中的视图控制器之间传递数据

在视图控制器之间传递数据而不使用 segues [重复]

iOS - 如何在通过手动 Segue 链接的两个视图控制器之间传递信息?

在视图控制器之间传递数据 - iOS Xcode - 啥是好方法?

以向导形式传递数据而不在 MVC 中回发