如何在场景之间传递信息目标c

时间:2013-09-24 12:53:34

标签: iphone ios objective-c

我对目标c和ios开发完全不熟悉,我只是尝试导航到我的故事板上的新场景,并在导航时将UIlabel的文本更改为某些内容。

我设置的方式是我有一个View控制器和一个tableview控制器,每个都有自己的头和实现文件。我正在使用视图控制器上的按钮中的segue导航到tableview。

我确实读过这个堆栈溢出帖子(How do I pass information between storyboard segues?),它解释了如何在segue上传递值并实现它:

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

    NSLog(@"prepareForSegue: %@", segue.identifier);
    if([segue.identifier isEqualToString:@"navtotablebut"])
    {
        TableViewController *testcontroller = segue.destinationViewController;
        testcontroller.testpass.text = @"Testing123";


        NSLog(@"%@",[NSString stringWithFormat:@"testpass has been changed to %@",      testcontroller.testpass.text]);
    }
}

日志验证这个segue方法是否被调用,并且能够正确识别我给它的id(navtotablebut)。然后我尝试将我的tableview控制器上的UIlabel文本属性的值设置为一个简单的字符串“Testing123”。然而,这种变化不仅不会反映在新屏幕上,而且之后我的print语句似乎认为testcontroller.testpass.text等于(null)。

我在这里做了一些可怕的错误吗?

3 个答案:

答案 0 :(得分:2)

在绘制“TableViewController”视图之前,在testcontroller中设置标签TableViewController的值。

请注意:如果使用Autolayout,请更新viewdidLoadviewDidLayoutSubviews中的视图。

最好的方法是将您的值作为字符串传递给其他视图控制器,然后填充。

答案 1 :(得分:1)

只需在prepareForSegue:方法中获取对目标视图控制器的引用,并将所需的任何对象传递给那里。这是一个例子......

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    {
        // Get reference to the destination view controller
        YourViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setMyObjectHere:object];
    }
}

还使用performSegueWithIdentifier:sender:方法根据选择或按下按钮激活转换到新视图。

// When any of my buttons are pressed, push the next view
-(IBAction)buttonPressed:(id)sender
{
    [self performSegueWithIdentifier:@"MySegue" sender:sender];
}

// This will get called too before the view appears
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"MySegue"]) {

        // Get destination view
        SecondView *vc = [segue destinationViewController];

        // Get button tag number (or do whatever you need to do here, based on your object
        NSInteger tagIndex = [(UIButton *)sender tag];

        // Pass the information to your destination view
        [vc setSelectedButton:tagIndex];
    }
}

答案 2 :(得分:0)

在TableViewController中,您需要创建属性

TableViewController.h

@property (nonatomic, strong) NSString *subject;

你传递的价值就是这样,

在ViewController中,

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier]isEqualToString:@"Detail"])
    {
       TableViewController *testcontroller = segue.destinationViewController;
       testcontroller.testpass.text = @"Testing123";
        detailView.subject = testcontroller.testpass.text;

    }
}