【问题标题】:View properties resetting after view change视图更改后视图属性重置
【发布时间】:2012-11-13 20:30:22
【问题描述】:

我一直在尝试使这项工作有一段时间没有机会,每次我从一个视图更改到另一个视图时,视图的变量和内容都会重置为“默认”,例如,如果在一个视图中我更改了标签的文本字段从默认的“标签”改为“你好”,然后更改视图,一旦我回到相同的视图,文本将再次为“标签”。

到目前为止,我解决这个问题的唯一方法是设置一个静态字符串,然后在 viewDidLoad 中将 Label.text 更改为字符串。我只知道这不是这样做的方法。我有一种预感,这与我如何从视图转换到视图有关(分配和启动等)

我目前的过渡方式:

FirstView.h:
@interface FirstView : Engine
@property(nonatomic, readwrite) MainGameDisplay *secondView;

FirstView.m:
@implementation FirstView

- (IBAction)StartGame:(id)sender 
{ 
    if (! self.secondView)
    self.secondView = [[MainGameDisplay alloc] initWithNibName:nil bundle:nil];
    [self presentViewController: self.secondView animated:YES completion:NULL];
}

还有 MainGameDisplay:

MainGameDisplay.h:
@class ViewController;

@interface MainGameDisplay : Engine
@property (strong) ViewController *firstPage;

MainGameDisplay.m:
@implementation MainGameDisplay

- (IBAction)returnToHome:(id)sender {
    if (!self.firstPage)
        self.firstPage = [[ViewController alloc] initWithNibName:nil bundle:nil];
        [self presentViewController: self.firstPage animated:YES completion:NULL];
}

我想要的是不必通过 viewDidLoad 再次设置所有值,我只是无法将其视为一种好的编程风格。

【问题讨论】:

    标签: objective-c ios xcode


    【解决方案1】:

    您对出了什么问题的怀疑是对的。尽管您将方法称为returnToHome:,但您并没有真正返回任何地方,而是在您已有的任何东西之上堆叠了ViewController 的新副本。

    要真正返回,presentViewController: 的反义词是dismissViewControllerAnimated:。当按下按钮返回时,尝试在 MainGameDisplay 类中使用它。

    【讨论】:

    • 效果很好,谢谢!但我已经可以发现未来的问题。如果我从 MainGameDisplay 转到 SecondView,然后直接到 ThirdView,如果我直接回到 MainGameDisplay,那会不会是一个新实例?我想说的是,有没有一种方法可以让所有视图实例在某种“超类”下相互交织在一起,这样我就总是去同一个。
    • 如果您使用 modal 控制器,通常最好只有两个级别。模态的概念是有一些事情正常发生,然后这个模态的事情在它可以继续之前中断它。对于您的示例,如果您可以构造程序以便执行以下操作,那么生活会更简单: main->second->main->third->main.... 这可能意味着使用数据或通知(或其他东西)告诉 main接下来应该做什么。
    • 对于需要一堆控制器并能够返回一个或多个级别的情况,这几乎定义了具有推送和弹出(而不是呈现和关闭)的导航控制器的目的。
    猜你喜欢
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2021-06-28
    • 2014-07-04
    • 1970-01-01
    相关资源
    最近更新 更多