如何在视图控制器之间传递数据而不在 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 在视图控制器之间传递变量?
iOS - 如何在通过手动 Segue 链接的两个视图控制器之间传递信息?