gpt4 book ai didi

ios - 交替使用 Split View Controller 和 Navigation Controller 作为 Window Root View Controller

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:32 25 4
gpt4 key购买 nike

我有一个导航 Controller ,它是我应用程序的 Root View Controller 。这是我的主屏幕。我有一个 Split View Controller ,其主视图列出了位置,详细 View 显示了 map 上的位置。我想将 Split View Controller 推送到导航 Controller ,但它抛出一个错误,指出 Split View Controller 无法推送到导航 Controller ,它必须是应用程序的 Root View Controller 。所以我努力尝试。

MyAppDelegate *myappdelegate= [[UIApplication sharedApplication] delegate];
UISplitViewController * vc= [[UISplitViewController alloc] init];
vs.viewControllers = [NSArray arraywithObjects......
....
myappdelegate.window.rootViewController= vc;

这行得通。它按预期显示没有动画的 Split View Controller 。当我关闭 Split View Controller 时,我执行相同的步骤。我正在创建一个带有主屏幕 Nib 的导航 Controller ,并再次设置我的应用程序委托(delegate)的 window.rootviewController。它再次成功加载主屏幕。

但我怀疑这是实现这一目标的正确方法。有没有更合适的方式来做到这一点?

而且我无法释放 Split View Controller 的子 Controller 。我在我的子 Controller 释放方法上做了一个断点。它没有被捕获。我假设当我将我的应用程序的 Root View Controller 设置为导航 Controller 时,旧的 Root View Controller ( Split View Controller )必须与其 subview 一起发布。然后我在关闭 Split View Controller 时尝试了以下代码。

UISplitViewController *oldviewcontroller= (UISplitViewController*) myappdelegate.window.rootViewController;
for (UIViewController *child in oldviewcontroller.viewControllers)
{
[child release];
}

//Setting the navigation controller as window.rootviewController again in here.

此代码抛出错误“[UIImageView __viewDidDisappear:]:无法识别的选择器已发送至实例 0x7d...”

我认为因为已经释放 View ,viewdidDisappear 事件上没有 ImageView 。

简而言之,我的问题是我是否使用了正确的方法来实现这一目标?如果是这样,我如何才能成功释放所有 subview Controller ?

最佳答案

终于找到方法了。我可能发现了错误。我所做的就是砍掉我坐的 Twig 。我正在释放我目前所在的 View Controller :) 当调用 viewdidDisappear 时,没有这样的 View Controller 。因为我已经把它扔到太空了。下面是我的工作步骤。我希望它对某人有用。但我无法忍受苹果可能会拒绝我的应用程序。我希望找到一个合适的方法。

这是我交替使用 Split View Controller 和导航 Controller 作为窗口 Root View Controller 的最终工作方式。

首先,我在 AppDelegate 接口(interface)中定义了 NavigationController 和 SplitViewController 属性。

AppDelegate.h
@property (assign,nonatomic) UINavigationController * NC;
@property (assign,nonatomic) UISplitViewController *SVC;

其次,我在 AppDelegate didFinishLaunch 事件上分配新创建的 NC。

AppDelegate.m
//Creating my main screen controller
//Creating my navigation controller with my view controller instance. Then
self.NC= my_navigation_controller;
self.window.rootViewController= self.NC;

第三次创建一个splitview controller并设置为app的root view controller

 MyMainScreen.m
-(void) OpenSplit()
{
//Creating my master view controller of SVC
//Creating my detail view controller of SVC
//Creating my SVC;
AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate];
app_delegate.SVC= newly created my SVC;
app_delegate.window.rootViewController= app_delegate.SVC;
}

第四,在SVC详情 View 的viewDidLoad事件中释放未使用的NC。

MyDetailView.m
- (void) viewDidLoad()
{
...
AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate];
app_delegate.NC= nil; //i dont need it now. i am releasing. Releasing Navigation Controller release as well child controllers. I learned with testing.
}

第五,管理关闭 Split View功能。我在 DetailView 的 NavigationBar 上使用了 UIBarButton。

MyDetailView.m
-(void) closeSplitView
{
//Creating navigation controller with my main screen view controller
AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate];
app_delegate.NC= newly_created_NC;
app_delegate.window.rootViewController= appdelegate.NC;
}

第六处理主屏幕 viewDidLoad 事件中未使用的 Split View Controller 。

 MyMainScreen.m
-(void) viewDidLoad
{
AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate];
app_delegate.SVC= nil; //I am releasing it because i am working with NC now.
}

关于ios - 交替使用 Split View Controller 和 Navigation Controller 作为 Window Root View Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com