如何将数据从一个视图控制器传递到另一个嵌入在导航控制器中的视图控制器

时间:2015-01-14 05:38:37

标签: ios uiviewcontroller uinavigationcontroller viewcontroller navigationcontroller

我能够将数据从一个视图控制器传递到另一个视图控制器,但是当我在导航控制器中嵌入了viewpapersViewController时,数据没有传递, 我想在按下按钮时将数据传递给第二个视图控制器

最初按下按钮时发送请求,然后发送到connectionDidFinishLoading

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

  // NSLog(@"Finish Loading");
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self->_responseData options:NSJSONReadingMutableLeaves error:&myError];


Papers *papersViewController =
[self.storyboard instantiateViewControllerWithIdentifier:@"Papers"];
papers = [[NSMutableArray alloc]init];
urls=[[NSMutableArray alloc]init];
for(id key in res) {

    NSString* name = [key objectForKey:@"name"];
    NSString* url =[key objectForKey:@"url"];

    [papers addObject:name];
    [urls addObject:url];

}

viewpapersViewController.exam = exam;
viewpapersViewController.papersName=papers;
viewpapersViewController.urls=urls;

[self presentViewController:viewpapersViewController animated:YES completion:Nil];

}

3 个答案:

答案 0 :(得分:0)

假设您要传递字符串,您只需通过以下步骤传递数据: -

1-转到第二个视图控制器并获取 - NSString * str;

2-当您从第一个视图控制器按下按钮时,直接传递数据
    像: - secondClassObject.str = FirstClassString。   3-然后简单地推送您的导航。

答案 1 :(得分:0)

通常,我们会以两种方式传递数据:

  1. 我们只是实例化目标 UIViewController ,然后将数据传递给其属性。
  2. 我们使用的另一种方式是segue。从本质上讲,它与第一种方式相同。
  3. 对于你的问题,我能想到的是你没有得到你的 UIViewController 。 您可以先尝试获取 UINavigationController 。 然后,使用此属性访问顶部的UIViewController:topViewController

答案 2 :(得分:0)

如果您将ViewController与相同的导航控制器连接。您必须通过从第1视图拖动到第2视图,从第1视图到第2视图执行PUSH Segue。单击“推送”选项。你已经设置了Push Segue。

通过点击2个视图之间的链接,为segue命名。

现在你可以通过

执行简单的Segue
[self performSegueWithIdentifier:@"identifier for segue" sender:self];

现在在第一视图

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"identifier segue"]){
    // Get the new view controller using [segue destinationViewController].
    2nd View *vc = [segue destinationViewController];
    2nd vc.variableName  = YES;
}}

在界面文件的第二个视图中 添加属性

@property variable *variableName;