ios – 如何d回到根视图控制器,然后再推到不同的视图?

ios – 如何d回到根视图控制器,然后再推到不同的视图?,第1张

概述我正在编写一个具有3个视图控制器的简单应用程序.根视图控制器是一个项目列表,基本表视图.关闭这个视图控制器,我推送两个不同的视图控制器基于一些用户交互 – 创建项目视图控制器或视图项目视图控制器. 所以,故事板看起来就像一个V,或者什么. 在我的创建项目视图控制器上,当用户创建一个新项目时,我希望它回到根视图控制器,然后推送到视图项目控制器,以便我可以查看新创建的项目. 我似乎无法让这个工作.很容 我正在编写一个具有3个视图控制器的简单应用程序.根视图控制器是一个项目列表,基本表视图.关闭这个视图控制器,我推送两个不同的视图控制器基于一些用户交互 – 创建项目视图控制器或视图项目视图控制器.

所以,故事板看起来就像一个V,或者什么.

在我的创建项目视图控制器上,当用户创建一个新项目时,我希望它回到根视图控制器,然后推送到视图项目控制器,以便我可以查看新创建的项目.

我似乎无法让这个工作.很容易回到根视图控制器,但是我无法推送该视图项目控制器.

有任何想法吗?我在下面粘贴了我的代码. pop功能有效,但新视图不会出现.

- (voID) onSave:(ID)sender {    CLLocation *currentLocation = [[LocationHelper sharedInstance] currentLocation];    // format the thread object dictionary    NSArray* location = @[ @(currentLocation.coordinate.latitude),@(currentLocation.coordinate.longitude) ];    NSDictionary* thread = @{ @"Title": _TitleFIEld.text,@"text": _textFIEld.text,@"author": @"mustached-bear",@"location": location };    // send the new thread to the API server    [[DerpHipsterapiclient sharedClIEnt] postPath:@"/API/thread"                                       parameters:thread                                          success:^(AFhttpRequestoperation *operation,ID responSEObject) {                                              // init thread object                                              Thread *thread = [[Thread alloc] initWithDictionary:responSEObject];                                              // init vIEw thread controller                                              ThreadVIEwController *vIEwThreadController = [[ThreadVIEwController alloc] init];                                              vIEwThreadController.thread = thread;                                              [self.navigationController popToRootVIEwControllerAnimated:NO];                                              [self.navigationController pushVIEwController:vIEwThreadController animated:YES];                                          }                                          failure:^(AFhttpRequestoperation *operation,NSError *error) {                                              [self.navigationController popToRootVIEwControllerAnimated:YES];                                          }];}
解决方法 完成您想要做的一个简单的方法是在主根视图控制器中构建一些简单的逻辑 – (voID)vIEwWillAppear方法,并使用委托回调来翻转逻辑开关.基本上是根控制器的“反参考”.这是一个快速的例子.

主控制器(考虑这个控制器a) – 把它称为控制器A
设置属性以跟踪跳转状态

@property (nonatomic) BOol jumpNeeded;

设置一些逻辑

- (voID)vIEwWillAppear:(BOol)animated {    [super vIEwWillAppear:animated];    self.jumpNeeded ? NSLog(@"jump needed") : NSLog(@"no jump needed");    if (self.jumpNeeded) {        NSLog(@"jumPing");        self.jumpNeeded = NO;        [self performSegueWithIDentifIEr:@"controllerC" sender:self];    }   }

现在,在你的主根控制器中,当选择一个tablevIEw行时,会做这样的事情
当你在tableVIEw中调用controllerB时,选择了方法

[self performSegueWithIDentifer@"controllerB" sender:self];

然后执行你的准备segue方法

- (voID)prepareForSegue:(UIStoryboardSegue *)segue sender:(ID)sender {  //setup controller B  if([segue.IDentifIEr isEqualTo:@"controllerB"]){    ControllerB *b = segue.destinationVIEwController;    b.delegate = self;  //note this is the back reference  }  //implement controller c here if needed}

现在转到controllerB
您需要设置一个名为“delegate”的属性来保存后面的引用
您需要从根控制器导入头文件

#import "controllerA"@property (nonatomic,weak) controllerA *delegate;

那么在你d回到controllerA之前,你设置了标志

self.delegate.jumpNeeded = YES;    [self.navigationController popVIEwControllerAnimated:YES];

就是这样.你不必与controllerC做任何事情.还有一些其他的方法可以做,但这是很简单的,为您的需要.希望它适合你.

总结

以上是内存溢出为你收集整理的ios – 如何d回到根视图控制器,然后再推到不同的视图?全部内容,希望文章能够帮你解决ios – 如何d回到根视图控制器,然后再推到不同的视图?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1108609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存