0

我之前问过一个类似的问题,得到了很多答案,首先感谢他们,但由于项目的复杂性,我不明白答案,所以我决定这次以非常简单的形式再问一次。

我在 viewcontrollerA 中有一个按钮,我希望该按钮写在 viewcontrollerB 中的标签上。A 处的简单按钮将在 B 上设置标签文本。

例子

用户打开应用

点击页面 A 的按钮

第二页出现,在该页面标签文本由标签设置。文本代码来自 viewcontroller A 它调用代码

或者也许我可以从 B 调用 A 的代码,只要我做了它并不重要。我可以制作按钮来打开另一个视图控制器,所以你不需要解释它。

另外,如果有任何其他方法,只要它们很简单,我也可以这样做。也许我在其他地方编写了代码并从 A 和 B 调用它。

请逐步解释它,因为我对目标 C 和 xcode 知之甚少。

我问这个问题是为了了解视图控制器之间的连接。实际上,我会让那个按钮在第二页显示一个随机数,但它现在并不重要,因为如果我学会了简单的连接,我可以做剩下的事情。

4

2 回答 2

0

在您的操作中,您需要引用第二个视图控制器。例如

- (IBAction)buttonAClicked:(id)sender {
    ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
    [self.navigationController pushViewController:vc2 animated:YES];
    vc2.someVariable = @"This is random text";
    [vc2.someButton setTitle:@"Some button text" forControlState:UIControlStateNormal];
}

这显示了如何创建第二个视图控制器,更改两个属性,然后推送它。

于 2012-07-23T21:45:25.493 回答
0

在您的第二个视图控制器中创建一个名为theTextthat的属性NSString,然后将其viewDidLoad分配label.textNSString;

- (void)viewDidLoad
{
    if(self.theText)
        self.label.text = self.theText;
}

现在使用您的第一个视图控制器theText在第二个视图控制器中进行设置。

如果您使用的是 segue,请使用prepareForSegue

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"Second View Segue"])
    {
        SecondViewController *theController = segue.destinationViewController;
        theController.theText = @"Some text";
    }
}

如果您使用某种模态演示:

SecondViewController *theController = [[SecondViewController alloc] init];
theController.theText = @"Some text";
[self presentModalViewController:theController animated:YES];

或者如果您使用的是导航控制器:

SecondViewController *theController = [[SecondViewController alloc] init];
theController.theText = @"Some text";
[self.navigationController pushViewController:theController animated:YES];

所以你的第一个视图控制器将NSString在第二个中设置属性,然后第二个将在加载期间设置UILabel等于。在加载第二个视图控制器之前,NSString您不能设置 a 的文本,例如:UILabel

SecondViewController *theController = [[SecondViewController alloc] init];
theController.label.text = @"Some text";
[self.navigationController pushViewController:theController animated:YES];

将无法正常工作,因为在加载视图之前您无法设置标签的文本。

希望有帮助。

于 2012-07-23T22:02:57.700 回答