1

所以我有两个场景......第一个有 2 个输入文本字段。在进入下一个场景之前,我在第一个字段中输入信息。下一个场景生成信息,我需要在第一个场景中使用这些信息来输入第二个文本字段。每次我回到第一个场景时,第一串信息都会被清除。我不能简单地使用后退按钮,我需要使用 prepareforsegue 所以我很好奇是否有任何方法可以在场景 1 中输入我的文本信息,继续到场景 2(生成其他信息)并继续回到场景 1 而不会丢失之前的信息进入?

我希望这是足够的信息。提前致谢。

已编辑

这是我的一些代码。

inputMilesViewController.h(第一视图)

@property  (weak, nonatomic)IBOutlet UIButton *myTodayButton;

(myTodayButton 转为 dvc - 在转之前 myTodayButton.titleLabel.text 等于“TODAY”)

dvc.m(第二视图)

- (IBAction)myNewSelectDate:(id)sender {

 inputMilesViewController *classInstance = [[inputMilesViewController alloc] init];

[classInstance changeButtonText:[_myNewDatePicker date]];

[self dismissViewControllerAnimated:YES completion:nil];

 }

inputMilesViewController.m(第一视图)

-(void) changeButtonText:(NSDate*) dateForInput{
NSLog(@"The button is titled %@", self.myTodayButton.titleLabel.text);

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE, MMM d,''yy"];

NSString *formattedDateString = [formatter stringFromDate:dateForInput];

... ...(在这里我尝试将按钮的文本更改为 formattedDateString 但是 NSLog 指示按钮文本现在为(null)。

4

2 回答 2

1

我同意佩德罗斯的观点。听起来你做错了。您可能正在使用 segue 从 vc1 到 vc2,然后使用另一个 segue 从 vc2 到 vc1 - 这是错误的!这是错误的,因为真正的 segue 创建了一个新的视图控制器实例。所以你不会回到你之前离开的同一个 vc1;相反,你正在制作一个全新的 vc1 并继续这样做!这就是字段为空的原因;这是一个全新的干净视图控制器。

相反,你想做的是做一个真正的转场,然后一个“退出”(或“放松”)转场回来。这是一个新的 iOS 6 功能。我这里有一些例子:

https://github.com/mattneub/Programming-iOS-Book-Examples

特别是看四个名字以“ch19p560”和“ch19p561”开头的例子。这些展示了如何在你转场时将信息从 vc1 传递到 vc2,然后在你放松时如何将信息从 vc2 传递回同一个 vc1 实例。它们说明了不同程度的展开(例如,跳回几个视图控制器)和在不同的情况下。

于 2012-11-09T05:43:50.283 回答
1

新编辑

在顶部添加导入inputMilesViewController.m

// At the top with the other #imports
#import "dvc.h"

我还建议在进入 iOS 之前学习面向对象。它的一个关键部分。它并不难,但绝对是必不可少的。

将此代码添加到您的项目中。在inputMilesViewController.m添加

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [segue.destinationViewController setClassInstance];    
}

dvc.h添加这个:

@property (weak, nonatomic) inputMilesViewController *classInstance;

dvc.m添加这个:

@synthesize classInstance = _classInstance;

- (IBAction)myNewSelectDate:(id)sender {

    // Removed this line
    //inputMilesViewController *classInstance = [[inputMilesViewController alloc] init];

    [self.classInstance changeButtonText:[self.myNewDatePicker date]];

    [self dismissViewControllerAnimated:YES completion:nil];

 }

因此,正如我在评论中所说,这段代码所做的是将您的字符串提供给原始的 fisrtViewController,而不是您刚刚创建的新字符串。要实现这一点,您需要创建属性classInstance并使其成为对原始 viewController 的引用。

快速提示:让你的类名以大写开头,这样你就可以将它们与变量区分开来。所以在这种情况下:InputMilesViewControllerDvc

另外,在我看来,您对面向对象编程不是很熟悉。我建议您尝试了解更多关于它和 MVC 模型的信息。两者都是 iOS 编程的关键部分。

如果它仍然不起作用告诉我。

希望能帮助到你。

于 2012-11-08T02:52:42.770 回答