在不丢失先前信息的情况下退回

时间:2012-11-07 22:38:12

标签: iphone xcode storyboard segue

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

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

EDITED

以下是我的一些代码。

inputMilesViewController.h(FIRST VIEW)

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

(myTodayButton代表dvc - 在segue之前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(FIRST VIEW)

-(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)。

2 个答案:

答案 0 :(得分:1)

NEW EDIT

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编程的关键部分。

如果它仍然无法告诉我。

希望它有所帮助。

答案 1 :(得分:1)

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

相反,你要做的是做一个真正的segue out和一个“退出”(或“放松”)segue回来。这是一个新的iOS 6功能。我在这里有一些例子:

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

特别是,看看名称以“ch19p560”和“ch19p561”开头的四个例子。这些节目展示了如何在你发现时将信息从vc1传递到vc2,然后展示如何在退出时将信息从vc2传回到同一个vc1实例。它们说明了不同程度的展开(例如,跳回几个视图控制器)以及各种情况。