3

在我的应用程序中,我使用的是导航控制器。我的问题是,当我转到上一个视图(使用生成的导航后退按钮)时,我的 NSString 数据不会传输过来。当我从导航控制器浏览堆栈时,我不知道如何保存这些 NSString 值。我需要发送一封包含这些 NSString 值的电子邮件。

这是我在按下返回按钮之前的视图控制器

-(void)button{
    NSString *dd = @"text";
    viewcontroller.string = dd;
}

这是按下后退按钮后的前一个控制器(视图控制器)

。H

@property (strong,nonatomic) NSString *string;

.m

NSString *emailBody = [NSString stringWithFormat:@"%@  ", string];

另外,我发现这个问题与我的情况相似,我围绕它来模拟我的问题。popViewControllerAnimated 之后 UITextField 内容为空如果有人可以查看它并了解如何将其应用于我的情况,我将不胜感激。

4

2 回答 2

1

您应该使用委托:较早的(概述)控制器(您导航回的那个)应该实现详细视图控制器定义的协议。较早的控制器将在呈现之前将自己设置为详细控制器的委托。当被呈现并从细节控制器导航回概览控制器即将发生时,细节控制器可以在概览控制器被解除之前通知(也就是发送包含字符串作为参数对象的消息)概览控制器。

于 2013-09-01T01:49:25.173 回答
0

我同意 vikingosegundo 的观点,委派是处理这个问题的最佳方式。我建议你阅读这篇文章:点击这里

但有出路,

在您的子视图控制器中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"back"                                                                 style:UIBarButtonItemStyleBordered
                                                                  target:self
                                                                  action:@selector(goBack:)];

    self.navigationItem.leftBarButtonItem = backButton;
}

- (void) goBack:(id)sender
{
    NSArray *vcs = self.navigationController.viewControllers;
    id parentVC = [vcs objectAtIndex:[vcs count] - 2];
    if ([parentVC respondsToSelector:@selector(getStringFromChildVC:)])
        [parentVC getStringFromChildVC:@"text"];
    [self.navigationController popToRootViewControllerAnimated:YES];
}

并在您的父视图控制器 .h 文件中:

-(void)getStringFromChildVC:(NSString *)myString;

和 .m 文件

-(void)getStringFromChildVC:(NSString *)myString
{
    self.string = myString;
}

就这样吧。。不过还是建议你去学代表团。

于 2013-09-01T05:42:10.447 回答