1

我有一个简单的单视图 iOS 5 应用程序,我添加了第二个视图控制器。我将这些嵌入到导航控制器中,并在我的 FirstViewController 上放置了两个按钮。这些按钮中的每一个都有一个用于 segue 的命名标识符,该标识符依次在 iPhone 应用程序的 UI 中显示我的 SecondViewController。

一切都按预期工作,但是,我想在第二个视图控制器的标签中显示一些简单的东西,比如“你点击了按钮 1”。我尝试将这些数据手动放置在我在 AppDelegate 中声明的 NSMutableString 变量中,我可以在我的第二个视图控制器中访问该变量,但我分配给它的值永远不会显示在屏幕上。

显然,创建了 SecondViewController 的新实例,这可能就是我没有看到它的原因。我创建了一个类型为 UILabel 的 IBOutlet,其名称为 myLabel,以保存该值,但唉,我看不到任何变化。

任何帮助将不胜感激。

注意:我很高兴发布代码,但我认为它不会真正帮助解决我的问题。

4

4 回答 4

2

在这种情况下,我的解决方案始终是自定义-init方法。如,

-initWithButtonPressedString:(NSString*)message;

在第二个视图控制器中声明并调用:

self.secondView = [[SecondViewController alloc]initWithButtonPressedString:@"some conditional string"];

然后,所需要的只是第二个视图控制器中的 iVar 来处理传递的字符串。

于 2012-06-14T19:28:46.817 回答
1

要在视图控制器之间传递数据,您应该考虑 1. 为您的视图控制器进行自定义初始化,以传递附加信息或 2. 在您从第一个视图控制器访问的第二个视图控制器上创建属性。

您可以为您创建的 IBOutlet 创建一个属性,但您需要确保如果您从第一个视图控制器访问它,它是在加载视图之后。

没有看到你当前的代码很难给你更多的方向

于 2012-06-14T19:26:52.507 回答
0

你使用故事板吗?无论如何,您是否已将 IBOutlet 连接到 Interface Builder 中的变量?

如果您使用 Storyboards,您可能会尝试使用名为 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

IE。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"ChooseToDetailsSegue"]) {
        preparedSegue = segue;
        SaleDetailsViewController *saleDetailsVC = [preparedSegue destinationViewController];
        saleDetailsVC.saleDetailsProduct = [elementsArray objectAtIndex:selectedRow];
        saleDetailsVC.cardTransactionDetails = [[cardDetails alloc] init];
        saleDetailsVC.cardTransactionDetails.number = infoCardNumber;
        saleDetailsVC.cardTransactionDetails.month = infoExpiriationM;
        saleDetailsVC.cardTransactionDetails.year = infoExpiriationY;     
    }
}

您只需要初始化新的 ViewController(您的目的地)并引用它们的变量。

于 2012-06-14T20:22:54.737 回答
0

您还可以使用通知。在 FirstViewController 的第一个按钮的 IBAction 中,您可以添加

NSNotification *messageFromFirstViewController = [NSNotification notificationWithName:@"firstbuttonMessage" object:@"You clicked Button 1"]; [[NSNotificationCenter defaultCenter] postNotification:messageFromFirstViewController];

和你的第二个按钮的 IBAction 类似的东西。

在您的 SecondViewController 的 viewDidLoad 中,您可以添加

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(useNotification:) name:@"firstButtonMessage" object:nil];

创建 useNotification 方法来更改您的 myLabel:

-(void) useNotification:(NSNotification *)notification {
self.myLabel.text = notification.object;}
于 2013-05-19T09:14:48.367 回答