在实际开发中,如果要弹出或隐藏视图:
我们常用到presentModalViewController方法dismissModalViewControllerAnimated方法。
presentModalViewController:弹出视图
dismissModalViewControllerAnimated:隐藏视图
弹出视图:
FeedbackViewController *feedbackViewController = [[FeedbackViewController alloc] initWithNibName:@"FeedbackViewController" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:feedbackViewController];
[self presentModalViewController:navigationController animated:YES];
隐藏视图:
[self dismissModalViewControllerAnimated:YES];
关于这两个方法的几点说明:
1.iPhone上弹出/隐藏 视图时,使用为全屏模式
On iPhone and iPod touch devices, the view of modalViewController is always presented full screen.
2.搞清楚谁是presenting,谁是presented
如果A弹出B,那么A为presenting,B为presented。
3.隐藏视图的策略
The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, however, it automatically forwards the message to the presenting view controller.
我们假如A弹出B
就是说,A负责隐藏B;如果我们在B中调用dismissModalViewControllerAnimated方法,那么编译器,自动将消息发送给A。
等等,什么消息?
简单的理解,当执行presentModalViewController:方法:在A弹出B时:
执行A的viewWillDisappear方法,
通知B执行自己的viewWillAppear方法和viewDidAppear方法
执行A的viewDidDisappear方法
当执行dismissModalViewControllerAnimated方法:隐藏B时:
执行B的viewWillDisappear
通知A执行自己的viewWillAppear方法和viewDidAppear方法
执行B的viewDidDisappear方法
以下我做了个测试来输出一轮AB切换:
A:More
B:Feed
2012-12-27 14:01:23.666 WTV[1627:11303] -More--viewWillDisappear----
2012-12-27 14:01:23.672 WTV[1627:11303] -Feed--viewWillAppear----
2012-12-27 14:01:24.086 WTV[1627:11303] -Feed--viewDidAppear----
2012-12-27 14:01:24.087 WTV[1627:11303] -More--viewDidDisappear----
2012-12-27 14:01:25.745 WTV[1627:11303] -Feed--viewWillDisappear----
2012-12-27 14:01:25.745 WTV[1627:11303] -More--viewWillAppear----
2012-12-27 14:01:26.156 WTV[1627:11303] -More--viewDidAppear----
2012-12-27 14:01:26.157 WTV[1627:11303] -Feed--viewDidDisappear----
当我们信心慢慢,庆幸我们可以了解了这两个方法时,悲剧发生了:
4.苹果官方已经把这两个方法 Deprecated in
iOS 6.0. 了
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated;
- (void)dismissModalViewControllerAnimated:(BOOL)animated;
取而代之的是:
[self presentViewController:navigationController
animated:YES
completion:^(void){
// Code
}];
[self dismissViewControllerAnimated:YES
completion:^(void){
// Code
}];
新接口的差别是提供了一个参数,允许你传入一个block。这个block的回调方法在VC的viewWillDisappear方法后调用。也就是被隐藏的VC对象被释放后运行回调。
这样做的好处:可以方便做多个UI效果之间的衔接和转换。
分享到:
相关推荐
`presentModalViewController`自iOS 8之后已经被废弃,但在iOS 7及更早版本中广泛使用。现在,我们通常会使用`UINavigationController`的`pushViewController:animated:`或`present:animated:completion:`来替代。 ...
- iOS 8之后,推荐使用`UIPresentationController`和` presentViewController:animated:completion:`来代替`presentModalViewController:animated:`,因为后者已经废弃。 总结来说,`ModalViewDemo`是一个关于如何...
与`UINavigationController`不同,`UINavigationController`通过导航栏来管理并切换多个视图,`ModalViewController`则更适合在视图数量较少且不需要导航堆栈的情况下使用,比如用于弹出对话框或表单填写等场景。...
3. `Documentation`: 提供了ZBarSDK的文档,帮助开发者理解和使用API。 4. `LICENSE`: 开源许可文件,定义了使用ZBarSDK的法律条款。 **集成ZBarSDK到你的项目** 1. **添加库文件**:将`ZBarSDK`目录中的`libzbar....
这篇博客文章“ios 使用ZBar读取条形码和二维码”提供了一个详细教程,教你如何集成ZBar库并实现扫描功能。 首先,我们需要了解ZBar库。ZBar是由Simon Woodside开发的一个图像识别库,专门用于解析一维条形码和二维...
总结来说,MPMoviePlayerController和MPMoviePlayerViewController适合简单场景,但在现代iOS开发中,AVPlayer和AVPlayerViewController由于其灵活性和更丰富的功能,成为更推荐的选择。开发者可以根据具体需求,...
对于弹出式ViewController,通常会使用UIStoryboardSegue或者presentModalViewController来展示扫描界面,用户扫描完成后,通过代理或者闭包将结果返回到主界面。而对于自定义嵌入界面,你可能需要在你的主界面中...
- 协议和分类的使用:`@protocol` - 内存管理的基础:`retain`, `release`, `drain`, `autorelease`, `NSAutoreleasePool` - 深复制与浅复制的概念:`NSCopying` - 常用的`NSFoundation`类掌握:`NSData`, `...
此外,如果我们使用的是UICollectionView,基本的流程是相同的,只是数据源和代理方法会稍有不同,如`collectionView:numberOfItemsInSection:`和`collectionView:cellForItemAtIndexPath:`。UICollectionView提供了...
完成配置后,将其push到导航控制器的栈中,或者使用presentModalViewController来展示,以便用户进行交互。 在用户完成拍摄或选择后,UIImagePickerController会调用其代理对象实现的协议方法。我们通常需要遵循...
在Unity引擎中开发iOS应用时,涉及到用户交互和媒体访问是非常常见的需求,特别是涉及到上传头像、使用相机和相册功能以及截图拍照。本教程将详细介绍如何在Unity中实现这些功能,以满足iOS平台的应用需求。 1. **...
在移动应用开发中,Xamarin.Forms 是一个强大的跨平台框架,允许开发者使用 C# 和 .NET 库创建原生 iOS、Android 和 UWP 应用。本教程将深入探讨如何在 Xamarin.Forms 应用中调用设备的相机进行拍照以及访问图库选择...
iOS 相机的调用,相册使用方法 UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; // if (![UIImagePickerController isSourceTypeAvailable: ...
可以将其添加到当前视图控制器的view上,然后调整其frame或者使用presentModalViewController方法。 6. **生命周期管理**:确保在适当的时候释放资源,比如在视图消失时移除动画和通知,防止内存泄漏。 在实际项目...
跳转到第二个页面时,确保正确设置NavigationController或者使用presentModalViewController。完成数据传递后,记得在适当的时候销毁Block,以避免循环引用问题。 6. **内存管理**: 注意Block会捕获其作用域内的...
可以使用 `presentModalViewController:animated:` 来显示一个新的控制器,该控制器会覆盖当前视图。而 `dismissModalViewControllerAnimated:` 用于关闭模态视图,返回到之前的状态。 3. **直接添加视图(Add ...
3. C: 使用`presentModalViewController:animated:`方法显示ModalViewController,创建了一个模态视图,MainViewController不再控制屏幕显示,而是由ModalViewController接管。 ModalViewController中的`delegate`...
在iOS应用开发中,苹果设备提供了内置的相机功能,允许用户通过...为了在实际项目中使用这段代码,开发者需要确保已经导入了`UIKit`和`MobileCoreServices`框架,并处理好权限问题,因为访问相机需要用户的授权。
在iOS开发中,图片处理是常见的需求之一,包括图片上传和图片压缩。本文将围绕这两个主题进行详细讨论,以帮助iOS开发者理解如何有效地管理和优化图片资源。 首先,我们需要获取用户的照片。在iOS中,我们可以使用`...
首先,我们需要了解什么是代理以及如何设置和使用。 代理(Delegate)是一种设计模式,它允许对象之间进行松散耦合的通信。在iOS中,我们通常通过遵循特定的协议(Protocol)来实现代理。在这个例子中,我们将创建...