0

我在 Xcode 4.6 中有一个使用情节提要的应用程序。在我的应用程序中,我有两个相关的视图控制器:一个提出问题,一个给出所提问题的答案。(作为 iOS 新手)我最初将其设置为问题控制器推送到答案控制器,答案控制器(通过按钮)推送到问题控制器(针对新问题)等等on,从而导致巨大的导航堆栈和内存崩溃,应用程序使用的时间越长。

所以,我相信我需要做以下事情:问题控制器应该继续回答控制器,然后我需要答案控制器弹出回问题控制器但带有新的问题图像。我在问题控制器的 viewWillAppear 方法中放置了重置图像的代码,该方法工作正常,但这里有一个问题:我并不总是希望每次问题控制器出现时都重置图像。如果选择了答案控制器中的答案,我只希望它重置。我尝试在问题控制器上从答案控制器设置一个 bool 属性以有条件地重置视图,但这不起作用。

第二个问题是,为了记忆,我需要回到问题控制器,但为了风格,我想给出一个推动 segue 的错觉。我不知道这是否可能。

简而言之,我的两个主要问题是:
1)是否可以有条件地重置我要弹出的控制器的视图?

2)是否可以从右到左而不是从左到右为视图控制器弹出动画?

谁能为我回答这些问题,或者甚至为我试图解决的最终内存问题提出一个完全不同的解决方案?谢谢。

4

1 回答 1

0

1.对我来说,这听起来像是委托的工作。在您的答案 VC 中,您将为protocol委托声明一个和一个 iVar。像这样的东西:

@protocol AnswerDelegate
- (void)answerSelected:(NSString *)answer forQuestion:(NSString *)passedQuestion;
@end

然后添加委托属性和弱 iVar,(也为问题添加了公共属性):

@interface MyAnswerViewController : UIViewController {
    __unsafe_unretained id <AnswerDelegate> _delegate;
}

@property (nonatomic, assign) id <AnswerDelegate> delegate;
@property (nonatomic, strong) NSString *passedQuestion;

然后在 的实现文件中MyAnswerViewController,当给出答案时,您将触发委托方法:

[self.delegate answerSelected:@"Answer" forQuestion:@"PassedQuestion"];

在问题 VC 中,您需要做的就是将自己声明为该协议的代表:

@interface MyQuestionViewController : UIViewController <AnswerDelegate>

然后在实现文件的某个地方,实现委托方法:

- (void)answerSelected:(NSString *)answer forQuestion:(NSString *)passedQuestion {
  // Do something with the question and answer
  // Pop the VC if needed
}

这是处理将对象传回调用类的一种非常简单的方法。

2.这需要实现您自己的过渡动画。请参阅下面的 SO 帖子:

UINavigationController:反方向的弹出视图控制器

于 2013-03-06T19:25:09.657 回答