我在Xcode 4.6中有一个使用故事板的应用程序。在我的应用程序中,我有两个相关的视图控制器:一个提出问题,一个提出问题的答案。 (刚接触iOS)我最初设置它以便问题控制器推送到应答控制器,并且应答控制器推送(通过按钮)到问题控制器(对于新问题)等等等等因此,应用程序使用的时间越长,导致巨大的导航堆栈和内存崩溃。
所以,我认为我需要做以下事情:问题控制器应该切换到应答控制器,然后我需要应答控制器POP回到问题控制器但是有一个新的问题图像。我把代码重置为问题控制器的viewWillAppear方法中的图像工作正常,但这是一个问题:每次问题控制器出现时我都不想重置图像。如果选择了答案控制器中的答案,我只希望它重置。我尝试在问题控制器上设置一个bool属性从答案控制器有条件地重置视图,但这不起作用。
第二个问题是我需要为了记忆而回到问题控制器,但我想为了风格而给出一个推动segue的错觉。我不知道这是否可能。
简而言之,我的两个主要问题是:
1)是否可以有条件地重置我弹出的控制器的视图?
2)是否可以为视图控制器设置从右到左而不是从左到右的动画?
任何人都可以为我回答这些问题,甚至可以为我想要解决的最终内存问题提出一个完全不同的解决方案吗?感谢。
答案 0 :(得分: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: pop view controller in the opposite direction