我是 xcode 的新手,仍在学习它的基础知识。如果我的问题感觉太基本,请多多包涵。
我有一个观点,这是我的主要观点。当用户单击按钮(选项按钮)时,我想转到第二个视图。在这里,用户可以从许多可用选项中选择一个。
一旦用户选择了他的选项,我想将此值发送回第一个视图并从它所在的位置恢复处理(当用户单击选项按钮时)。
重要 - 用户将在处理过程中从 view1 移动到 view2。我必须从 view2 重新加入到 view1 并从我离开的地方恢复……这意味着,我需要所有变量值都可用。
我是 xcode 的新手,仍在学习它的基础知识。如果我的问题感觉太基本,请多多包涵。
我有一个观点,这是我的主要观点。当用户单击按钮(选项按钮)时,我想转到第二个视图。在这里,用户可以从许多可用选项中选择一个。
一旦用户选择了他的选项,我想将此值发送回第一个视图并从它所在的位置恢复处理(当用户单击选项按钮时)。
重要 - 用户将在处理过程中从 view1 移动到 view2。我必须从 view2 重新加入到 view1 并从我离开的地方恢复……这意味着,我需要所有变量值都可用。
简单的!您所要做的就是控制从 UIButton 拖动到新视图。选择模态。
push segue 不会创建父视图控制器的新版本。您是在 viewDidLoad 中还是在 viewDidAppear / viewWillAppear 中开始会话处理?您是否在 viewWillDisappear 中停止处理?在 viewWillDisappear 中,您可以使用以下代码片段检查导航控制器的堆栈以查看您的父视图是否已被覆盖或从堆栈中弹出:
- (void)viewWillDisappear:(BOOL)animated {
if ([[[self navigationController] viewControllers] indexOfObject:self] == NSNotFound) {
// we are disappearing. Clean up the session.
...
}
[super viewWillDisappear:animated];
}
您可以使用 UIViewController 的encodeRestorableStateWithCoder:方法在视图控制器中存储(有限数量的)状态 - 检查文档。我自己不使用它,但它可以提供帮助。
顺便说一句,您可能会发现使用 UIViewController 的done :、reset:和canPerformUnwindSegueAction:fromViewController:withSender:比创建委托协议更容易。Unwind segues 是在 iOS 6 中引入的,它需要的代码比委托少。
听起来你需要实现一个委托。我不是最擅长解释协议和委托的,所以我将提供讨论它们的链接。我将在下面提供一个粗略的实现。
两者之间的 区别协议和委托之间的区别?
View2.h
@protocol View2;
@interface View2 : UIViewController
@property (nonatomic, weak) id<View2Delegate> *delegate;
...
@end
@protocol View2Delegate
-(void)view2Finished:(NSString *)value;
@end
View2.m
@synthesize delegate
-(void)backButtonPressed
{
[delegate view2Finished:@"Value to be passed to view 1"];
}
View1.h
// This code says that View1 implements View2Delegate
@interface View1 : UIViewController<View2Delegate>
查看1.m
-(void)view2Finished:(NSString *)value
{
NSLog(@"Value received from view 2: %@", value);
}