1

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

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

我确实阅读了这篇堆栈溢出帖子(如何在故事板转场之间传递信息?),它解释了如何在转场上传递值并已实现它:

-(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 的 text 属性的值设置为简单的字符串“Testing123”。然而,这种变化不仅没有反映在新屏幕上,而且我之后的打印语句似乎认为 testcontroller.testpass.text 等于(null)。

我在这里做错了什么吗?

4

3 回答 3

2

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

请注意:更新视图viewdidLoadviewDidLayoutSubviews使用自动布局。

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

于 2013-09-24T13:07:06.093 回答
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];
    }
}
于 2013-09-24T12:58:15.400 回答
0

在 TableViewController 中,您需要创建属性,

表视图控制器.h

@property (nonatomic, strong) NSString *subject;

你这样传递价值,

在视图控制器中,

-(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;

    }
}
于 2013-09-24T12:59:04.603 回答