如何在uinavigationcontroller中调用viewdidload?

时间:2015-08-28 06:00:31

标签: ios objective-c iphone xcode

我正在寻找解决我的情况的方法。我的应用程序如下:

在VC1上有一个文本字段和按钮。用户键入名称。然后单击一个按钮。这个按钮打开VC2。用户在VC2中提供附加信息,然后按保存。我使用segue返回VC1并将这些附加信息作为字符串传输到VC1。但是在VC1中,viewdidload已经调用并且由于文本字段中的信息被删除了!如何在不调用viewdidload的情况下在VC之间导航?

我找到了一些关于单身对象的信息。如果我可以在一段时间内定义一个活着的物体,那么我会通过风险投资。如何让一个具有多个字段的对象一直处于活动状态。

3 个答案:

答案 0 :(得分:2)

viewDidLoad方法在UIViewController的每个生命周期中只调用一次,所以很可能你正在以某种方式创建新的VC1。您需要保持对第一个VC1的引用并返回到该视图控制器。

要使用UINavigationController进行导航,请使用以下方法:

[self.navigationController pushViewController:VC2];

[self.navigationController popViewControllerAnimated:YES];

(在VC1 / VC2中调用它们)

答案 1 :(得分:2)

我担心你为什么要使用push segue搬回来。

在这里你需要协助从VC-A到VC-B的推送segue并命名它的标识符如moveForward和按下按钮

[self performSegueWithIdentifier:@"moveForward" sender:self]; 

如果你想传递给VC-B的任何信息在这个方法中传递它

 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
   {
    if([segue.identifier isEqualToString:@"moveForward"])
    {
        VC-B* vcObject=[segue destinationViewController];

        //vcObject.info = your info//etc
    }
   }

同样,当您必须从VC-B返回VC-A时,将VC-B的倒带segue指定为VC-A并将其标识符命名为moveBack并按下按钮 并在VC-B中做上述方法。

答案 2 :(得分:-1)

以下是如何定义名为AppShareData的单例类: AppShareData.h

@interface AppSharedData : NSObject
+(AppSharedData*)sharedInstance ;
@property (nonatomic) BOOL sharedBoolVariable ;
@end

AppShareData.m:

@implementation AppSharedData
@synthesize sharedBoolVariable;
+(AppSharedData *) sharedInstance
{
   static AppSharedData *_sharedInstance = nil;
   static dispatch_once_t Token;
   dispatch_once(&Token, ^{
     _sharedInstance = [[AppSharedData alloc]init];
   });
  return _sharedInstance;
}
@end

然后如果你想在任何类中编辑或设置变量的值,我会执行以下操作:

-(void)editMethod
{
   AppSharedData * dataObject = [AppSharedData sharedInstance] ; 
   dataObject = YES ; 
}

如果我想在任何类中检索变量的值,我会执行以下操作:

-(void)retrieveMethod
{
   AppSharedData * dataObject = [AppSharedData sharedInstance] ; 
   BOOL someVariableInMyClass = [dataObject sharedBoolVariable] ; 
}