2013-11-21 42 views
-5

是否可以将数据从一个ViewController发送到另一个ViewController,而第二个ViewController嵌入在导航控制器中? (反之亦然)将数据传递给嵌入在导航控制器中的另一个VC

注意:对不起,我错过了应该有更多的细节。这里的问题是,应用程序结构如下所示:ViewControllerOne> UINvaigationController> ViewControllerTwo。所以我想将数据传递给ViewControllerTwo。我试图通过PrepareForSegue通过它,但我收到此错误:

-[UINavigationController setString:]: unrecognized selector sent to instance 0x98b71c0

下面是代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    VCC *vc2 = (VCC*)segue.identifier; 
    vc2.string = @"something"; 
} 
+0

Offcource有可能获得SecondViewController值。 – Smita

+0

怎么样? :)任何提示? – user1938695

+0

可能重复[在视图控制器之间传递数据](http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

回答

1

你的情况来传递数据的一个例子是这样的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if ([segue.identifier isEqualToString:@"segueName"]) { 

    SecondClassName *destTableViewController = [[segue.destinationViewController viewControllers] objectAtIndex: 0]; 
    destTableViewController.yourDataInSecondClass=yourDataInFirstClass; 

}} 

护理:你必须提供一个名称的第一个VC与导航控制器连接SEGUE和改变segueName在上面的代码这个名字。

prepareForSegue方法每次你选择改变VC时都会被自己调用。

+0

谢谢。我试过这个不适合我的情况。请参阅我刚刚添加的问题中的说明。 – user1938695

+0

你可以重写你的文章并添加一些代码吗? – hoya21

+0

好吧,我做到了。 – user1938695

0

Ofcourse。保存viewcontroller引用一些地方(不是最好的解决方案)。例如在AppDelegate中,[[UIApplication sharedApplication]委托] .viewController1和[[UIApplication sharedApplication]委托] .viewController2

这取决于你的结构如何获得viewcontrollers,但它并不难。

要获取navigationController中的所有viewcontroller:self.navigationController.viewControllers。它返回的是带有ViewControllers的NSArray。

+0

这是如此糟糕:) – Retterdesdialogs

+0

是的第一个答案是坏的,它挺取决于项目结构。 –

0

其实有很多这种查询方式 - 从他们的一个

解决方案 -

在你FirstViewController -

在UIButton的行动 -

SecondViewController *secondViewController = [[SecondViewController alloc] init]; 
secondViewController.stringForPassing = @"PassString"; 
[self.navigationController pushViewController:secondViewController animated:YES]; 

在SecondViewController。 h

@property (nonatomic,copy)NSString *stringForPassing; 

在SecondViewController.m

@synthesize stringForPassing; 

现在你可以在SecondViewController访问stringForPassing。

愿这能帮助你。先谢谢你。

+0

如果您已经有一个现有的secondViewController,这是行不通的,因为用这个创建SecondViewController的新实例 – Retterdesdialogs

+0

谢谢。我知道这种方式,我做了类似的事情(因为我使用segues),我采取了segue.destination和创建一个属性是第二个VC但是我得到一个错误,我发送实例到UINavigationController而不是目的地VC。注意:第一个和第二个VC – user1938695

+1

@Retterdesdialogs和user1938695之间有一个UINavigation控制器 - 谢谢reply.I将发布另一个。:) – Smita

0

您可以简单地使用属性在控制器之间发送数据。

假设你有2个ViewController,FirstViewController & SecondViewController。你想发送一个字符串@“世界你好”,以SecondViewController

然后

1. create a @property(nonatomic,retain) NSString * nameStr ; in SecondViewController 

2. synthesize it . 

3. suppose your navigating to secondViewController on click of a button . 

-(void) onButtonClicked 
{ 
    SecondViewController * secondVC = [[SecondViewController alloc] init]; 

    secondVC.nameStr = @"hello , world"; 

    [self.navigationController pushToViewController:secondVc]; 
} 

现在你可以通过调用self.nameStr

+0

是的,但是SecondViewController的新实例的值。这不会在两个存在的控制器之间传递一个值。 – Retterdesdialogs

+0

你在使用故事板吗? –

+0

是的,即时通讯使用故事板 – user1938695

相关问题