Ben*_*Ben 23 iphone uinavigationcontroller
我有一个带有两个选项卡的tabBarController,其中第一个包含NavigatorController的实例.navigatorController是使用自定义viewController"peersViewController"启动的,它列出了tableView上的所有网络对等体.选择对等体后,"FilesListViewController"(将c:\目录中的列表文件)的实例推送到navigationController堆栈中.
在这个filesListViewController中我有一个按钮让它导航到说文档目录.为此,我连接了接口以在rootViewController中调用gotoDirectory:(NSString*)路径方法:
- (void)gotoDirectory:(NSString*)path {
[[self navigationController] popToRootViewControllerAnimated:YES];
NSArray *files = [self getFilesFromPeerAtPath:path];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
Run Code Online (Sandbox Code Playgroud)
但是,当我按下该按钮时,navigationController确实将我的视图弹出到根视图控制器,但是我实例化的FilesListViewController没有出现.从日志中,我知道确实调用了自定义initWithFiles方法,并且确实发生了网络内容以获取文件名.
关于此,还有其他一些问题.我尝试点击第二个标签,然后点击返回第一个标签,然后点击!我需要的文件名就在那里.看起来数据和filesListViewController确实被推入了navigatorController堆栈,但显示没有刷新,而是停留在rootViewController(peersViewController)的屏幕上.
我做错了吗?
--Ben.
- 在发布问题后15分钟编辑.我找到了一个解决方法,但是让我困扰的是pop然后推不起作用.
- (void)gotoDirectory:(NSString*)path {
PeersListViewController *rootViewController = (PeersListViewController*)[[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] setViewControllers:[NSArray arrayWithObject:rootViewController]];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
Run Code Online (Sandbox Code Playgroud)
似乎应该以这种方式规避navigationController,我可能不得不释放原始堆栈中的所有viewControllers.但这确实适用于iphone 3.0模拟器.
如果我正在使用此代码,应如何处理内存释放?我应该获得原始的NSArray视图控制器并释放所有内容吗?
Nic*_*eet 83
这个问题和解决方案实际上非常简单.
呼叫[self.navigationController popToRootViewControllerAnimated:YES]设置self.navigationController为nil.当你随后打电话给[self.navigationController pushViewController:someOtherViewController]你时,你实际上正在发送一条消息nil,它什么都不做.
要解决此问题,只需设置对navigationController的本地引用,然后使用它:
UINavigationController * navigationController = self.navigationController;
[navigationController popToRootViewControllerAnimated:NO];
[navigationController pushViewController:someOtherViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
正如Jason所说,popToRootViewController必须在没有动画的情况下执行才能正常工作.
感谢Apple论坛上的jpimbert指出这一点.
Lod*_*oda 10
我遇到了一个非常类似的问题(但没有使用tab).
我有三个viewController : main(root),形式和结果.当UINavigationController堆栈是
"main -> result"
Run Code Online (Sandbox Code Playgroud)
在一个btnClick我做了一个popToRootViewControllerAnimated然后推送formViewCtrl.为了有
"main -> form"
Run Code Online (Sandbox Code Playgroud)
导航栏标题和后退按钮标签是正确的,并调用formViewCtrl的事件.但是,我仍然看到主要观点.
这是我的"解决方案"
做了一些测试后,我发现没有动画去rootViwCtrl这个工作正常.所以我只使用动画来推动viewCtrl.
iPhone 3.0,在设备和模拟器上发现问题.
如果我有新的东西,我会更新/评论我的帖子.
| 归档时间: |
|
| 查看次数: |
35826 次 |
| 最近记录: |