我需要一些帮助来为以下“问题”选择“正确”解决方案。

我使用新的故事板功能将应用程序的所有屏幕链接在一起。基本上,结构向下钻至:

导航控制器] => [视图控制器#1] => [TABBAR控制器] => [View Controller#2]*

**(还有其他一些目前不重要的选项卡)*

我已经将一个从第一个视图控制器(#1)连接到标签栏控制器后面的视图控制器。当用户按第一个控制器上的某些内容并正常工作时,将触发此推动。

// Execute preset segue
[self performSegueWithIdentifier:@"segueEventDetail" sender:self];

当用户(现在是视图控制器#2中的用户)按下Navbar中的后退按钮时,用户返回。假设他现在再次触发了segue,第二个视图控制器再次显示,但现在“重置”(空)。 (我相信在阅读了几篇论文和文章后,使用SEGUE时,这是标准行为,因为它们每次都会破坏并重新启动视图控制器吗?)

此(重置的视图控制器)提出了问题用户回来了。

我发现了一些描述相同问题的来源(请参阅底部),但是解决方案有所不同,我需要一些帮助选择正确的问题。

总结:

  • 当用户向后按下时,我如何“保留”/保存视图控制器的状态,同时保留故事板的使用并最好也是SEGUE的使用

自己的想法:

#1 我现在正在考虑缓存JSON对我的Singleton类的响应(以及从那里到PLIST),并在第二视图控制器中检查是否存在此数据,而不是重建视图,然后我检查任何新数据(恢复正常恢复正常)手术)。

#2 我正在考虑的另一个是“绕过” segue并手动处理视图的转换,部分解释了(故事板 - 请参阅AppDelegate中的ViewController) - 这也可能吗?

但是,也许有一个更容易/更好的选择?

http://www.iphonedevsdk.com/forum/iphone-sdk-development/93913-retaining-data-when-when-using-storyboards.html 故事板 - 请参阅AppDelegate中的ViewController 如何序列化uiview?

有帮助吗?

解决方案 2

对于将来遇到这个问题的任何人来说,这就是我最终“编码”它的方式。

  • 打开故事板并选择“标签栏控制器”,然后打开属性检查器

  • 在现场填写“标识符”

  • 使用第一个视图控制器(请参阅原始帖子中的方案),我创建了对ViewController的全局引用:

firstViewController.h

@interface YourViewController : UIViewController {

    UITabBarController *tabController;

}

firstViewController.m

//Fill the reference to the tabcontroller using the identifier
tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

现在从FirstViewController切换以下行:

[[self navigationController] pushViewController:tabController animated:YES];

其他提示

是的!我得到了解决方案。请执行下列操作:

在您的.h文件中:

@property (strong, nonatomic) UITabBarController *tabController;

在您.m文件中:

@synthesize tabController;

tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

选定的索引是您要去的标签

tabController.selectedIndex = 1;

[[self navigationController] pushViewController:tabController animated:YES];

这可能是更简单的解决方案(不使用属性 - 实际上,您所有的类实例都不需要了解其目标控制器,因此只需将其保存在推送功能中):

static UIVewController *destController = nil;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
if (!storyboard) {
    DLog(Storyboard not found);
    return;
}
if (destController == nil) { //first initialisation of destController
    destController = [storyboard instantiateViewControllerWithIdentifier:@"{Your Destination controller identifyer}"];
    if(!destController) {
        DLog(destController not found)
        return;
    }
}
//set any additional destController's properties;
[self.navigationController pushViewController:destController animated:YES];

PS DLog 只是我的变体 NSLog.

但是如何与Segue一起做这真的很有趣?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top