在iOS开发中,UINavigationController是很常用的Controller,对它的一般操作就像操作一个栈,push和pop。...但也经常会遇到pop和push无法优雅的完成的操作,比如退回到中间的某个VC上,或者在第一个VC之前添加一个VC等,更甚者要重新构造整个VC的顺序,这时候setViewControllers方法就排上用场了...,它使对VC栈的操作不再局限于push和pop,而是构造整个VC栈并应用到当前的UINavigationController中,这个方法支持iOS3.0+,放心使用。...setViewControllers:viewControllers animated:YES]; // [viewControllers relase] // if non-arc 感谢 Allen(Weibo) 提供的代码和思路
导航栏左上角的back按钮是附着在UINavigationController的UINavigationBar里自带的一个返回按钮,导航栏自带的back按钮的图层结构如下图所示。...self.navigationController.interactivePopGestureRecognizer.enabled = NO; //禁用侧滑手势 1.2 侧滑使用注意 侧滑手势在使用中需要注意的一点就是在项目开发中...,我们一般是采用的UITabBar + UINavigationController架构,对于每一个UITabBar的item模块,我们都定义一个UINavigationController对该item... 中添加按钮,然后添加按钮的点击功能即可。...,如果你上一级设置的backBarButtonItem的标题过长(没有设置则默认是上一级标题),那么系统可能会自动用“Back/返回”来代替返回按钮中的标题。
导航跳转 这种操作的前提是 UIViewController 包含在 UINavigationController 中。 storyboard 直接拽线,选择Show。...需要设置当前的 UIViewController 为被代理 UIViewController 中的代理属性。 闭包 可以理解为代理模式中协议的闭包替代,比代理模式更简单。...接收值的 UIViewController 实现需要传值的 UIViewController 中的闭包属性,在闭包的实现中拿到传过来的值进行使用。...因此UINavigationBar的栈和 UINavigationController 的栈一一对应。...UICollectionViewController:集合视图控制器,集成了 UICollectionView 的视图控制器。
本篇博客应该算的上CollectionView的高级应用了,从iOS开发之窥探UICollectionViewController(一)到今天的(五),可谓是由浅入深的窥探了一下UICollectionView...在上篇博客《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流》中,通过自定义的CollectionView创建了一个可定制的自定义瀑布流,效果还是蛮...CustomTransformCollecionLayout头文件中的代码如下所示,该文件中定义了一个协议,协议中的方法就是在CollectionView中要实现的那两个代理方法。...,其中的延展中的属性如下所示。...在实现中我们需要重写UICollectionViewLayout中相关的方法,需要重写的方法如下: (1).
在上面链接的视频里说到,一共有下面这四个地方可以用自定义过渡: Presentations and dismissals UITabBarController UINavigationController...UICollectionViewController layout-to-layout transitions 这个例子里,我们只涉及第二种 UITabBarController 另外还有 Interactive...view controller transitions 可交互过渡,例子就是在 NavigationController 的详细页面中从屏幕左侧滑入以返回时的那个动画。...然后在 viewDidLoad 中设置 TabBarController 的 delegate ,这里我们设置成为 self TabBarController 代码如下: class MainVC: UITabBarController...() { super.viewDidLoad() self.delegate = self // delegate设置为self } /* 如GIF中那样在切换时改变状态栏颜色
以后的几篇博客中好好的研究一下CollectionView,由浅入深,层层深入,搞透CollectionView这个强大的组件。...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...由上面可知UICollectionViewController是iOS6以后推出的东西,相对起来还是比较新的。 二....你可以创建一个自定义的UICollectionViewController子类来管理你的集合视图。...你可以重写loadView或者其他超类中的方法,但是如果你这样做, 你必须确保在你实现的方法中使用super调用了超类中相应的方法。
因此我们需要在系统提供的基本控制器UIViewController, UITableviewController, UINavigationController, UICollectionViewController...比如我们可以构建一个UINavigationController的派生基类,这样在进行控制器的push以及pop之前或者之后进行一些特殊处理。 但是这样问题就来了,因为OC语言并不支持多重继承。...、UICollectionViewController等等都将实现重复的代码。...、UICollectionViewController的派生类。...@end @implementation XXXBaseNavigationController @end //...分别实现的UITableviewController、UICollectionViewController
以后的几篇博客中好好的研究一下CollectionView,由浅入深,层层深入,搞透CollectionView这个强大的组件。...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...由上面可知UICollectionViewController是iOS6以后推出的东西,相对起来还是比较新的。 二. UICollectionViewController的实现行为 1....你可以创建一个自定义的UICollectionViewController子类来管理你的集合视图。...你可以重写loadView或者其他超类中的方法,但是如果你这样做, 你必须确保在你实现的方法中使用super调用了超类中相应的方法。
在上一篇博客中《iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流》,自定义瀑布流的列数,Cell的外边距,Cell的最大以及最小高度是在我们的布局文件中是写死的...在今天这篇博客中我们要接着上篇博客中的Demo,使其自定义布局的属性在使用它的UICollectionView中是可配置的。...当然在本篇要介绍的Demo中只提取了四个布局参数,无论添加一个Delegate,但思路都是一样的。我们把上一篇博客中写死的内容,通过布局代理来提供参数配置,这样就灵活多了。...的内容详见《iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调》中有关UICollectionViewDelegateFlowLayout...需要在UICollectionView的使用控制器中实现自定义布局中的代理方法来设置布局属性,我们这儿定了四个必须实现的方法。
*** 官方支持以下几种方式的自定义转场: 1、我们最常见的在 UINavigationController 中 push 和 pop; 2、也是比较常见的在 UITabBarController...4、UICollectionViewController 的布局转场:UICollectionViewController 与 UINavigationController 结合的转场方式; *** 区分...在后面在参考博客中我都会把这些博客链接总结发出来。 ...二:转场的几个关键点 转场最关键的地方就是几个转场协议,我们分开一个一个的说这几个转场的协议,在说这几个协议的过程中穿插一些简单的转场动画的案列,这些例子最后都会上传到git上去。...它的最主要的作用就是获取到转场上下文,在接下来的例子中,大家注意下这个方法: - (void)animateTransition:(id <UIViewControllerContextTransitioning
原文链接:https://www.cnblogs.com/ludashi/p/4831487.html 在上一篇博客中《iOS开发之UICollectionViewController系列(三) –...在今天这篇博客中我们要接着上篇博客中的Demo,使其自定义布局的属性在使用它的UICollectionView中是可配置的。...的内容详见《iOS开发之窥探UICollectionViewController(二) –详解CollectionView各种回调》中有关UICollectionViewDelegateFlowLayout...需要在UICollectionView的使用控制器中实现自定义布局中的代理方法来设置布局属性,我们这儿定了四个必须实现的方法。...参考文章: iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
引: 很多人知道可以用Category给已有的类添加一些新方法,但是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接添加属性的,那如果就是需要添加新的属性怎么办呢...有一个办法,使用Runtime中的关联对象技术就可以实现。...,在使用的时候,只需要import你创建的Category,在使用的时候还是使用原来的类,但是你会惊奇的发现他支持你自己在Category中添加的方法。...在工程中按住command+N来添加新文件,选择Objectiv-C File: 在出来的界面中的File Type选择Category,就是创建类别文件了,File填写我们要加在类别尾巴上的名字,Class...结 以上就是给Category添加属性的方法啦,不难,只要了解Runtime中的关联对象技术就可以轻松达到了。
在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...1 实现思路 通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是从UIApplication的keyWindow的rootViewController...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...class]]){ // 根视图为UINavigationController currentVC = [self getCurrentVCFrom:[(UINavigationController...[UIApplication sharedApplication].keyWindow.rootViewController获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController
2、Controller 的页面管理 上文提到,iOS中通过Controller(控制器)来管理View的绘制逻辑,那么具体是如何实现的呢? ...在iOS中,有两类ViewController: 一类用来展示内容,例如UIViewController,UITableViewController 一类用来作为容器,例如UINavigationController...3、多页面栈的管理方法 有了上文的铺垫,接下来可以更加细致地介绍iOS中多页面栈的管理方法。正如之前提到的,多页面即多个View。...iOS中采用容器类的ViewController来管理多个ViewController,而每个ViewController又对应着自己的View,从而实现统一管理。...一张图概括NavigationController的结构 3.2 通用的页面切换方式 容器类的ViewController通过一个特定的结构来实现多层级管理,但并不是所有页面都能确保是在同一个容器中
UINavigationController 2.1 UINavigationController的使用步骤 初始化UINavigationController 初始化UINavigationController...时, 可以通过initWithRootViewController:方法传入一个控制器作为根控制器 这个根控制器永远处于栈底(如果栈中只有一个对象,那么根控制器也处于栈顶) 设置UIWindow的rootViewController...UITabBarButton在UITabBar中得位置是均分的,UITabBar的高度为49。 UITabBar的结构⼤大致如下图所示: ?...Paste_Image.png 7.2.3 往UITabBarController中添加子控制器 有两种方法UITabBarController中添加子控制器 : [tb addChildViewController...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图
新创建项目目录 AppDelegate和SceneDelegate是iPadOS带来的新的多窗口支持的结果,并且有效地将应用程序委托的工作分成两部分。...原来在iOS13中,AppDelegate的文件结构发生了变化: iOS13以前:AppDelegate处理App生命周期和UI生命周期; iOS13以后:处理 App 生命周期和新的 Scene...Session 生命周期,在AppDelegate.h文件中没有了window属性,而是在SceneDelegate中,可见AppDelegate不管理window而是交给SceneDelegate。...*nav = [[UINavigationController alloc]initWithRootViewController:startVC]; self.window.rootViewController...1.SceneDelegate中添加@available(iOS 13, *); 2.AppDelegate中同样声明window属性,代码: - (BOOL)application:(UIApplication
下面是swift书写的时候的两个方法,其实这里不是教大家怎么样写的这个问题,我是想通过这两个不同语言的进行的一个比较,向大家找他们之间“想法”上的一些相同点,这样子我们学习swift的时候,就可以更加的游刃有余...我们熟悉OC这门语言,找到他么想法上的相同点了,你也就可以利用OC来学习swift了。...(rootViewController: vc)) } 下面是我们熟悉的OC的写法 HomeViewController * home =[[HomeViewController...alloc]init]; home.title=@"首页"; home.tabBarItem.title=@"首页"; UINavigationController * na...@[na,na1,na2,na3]; 通过上面简单的对比,希望你能看到他们思想上的相同点,有些东西你悟出来的比我告诉你的更好!!!
在很多的应用中,基本都是使用Tab方式进行模块间的切换。...在Android中很多控件可以实现这类效果,TabLayout、TabHost… 而在iOS中系统为我们提供了UITabBarController类来实现Tab页面之间的切换。...有几个页面我们就创建几个UINavigationController,然后通过tabbar.viewControllers = @[navi1, navi2, navi3…]; 设置给UITabBarController...在进行Tab切换的设计思想上Android和iOS是一致的,就是通过控件去管理页面,所以有几个Tab,我们就要创建几个View实例。 项目实例 ?...*navi1 = [[UINavigationController alloc]initWithRootViewController:redVC]; GreenViewController
iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem...和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便...nullable NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 三、导航控制器中的常用方法和属性...//iOS7之后,在导航中右划会进行pop操作,设置这个的enable可以控制设置手势是否失效 @property(nullable, nonatomic, readonly) UIGestureRecognizer... *interactivePopGestureRecognizer; 四、iOS8后导航的新特性 //这个方法是为了iOS方法的命名统一,在导航中,其作用和push一样 - (void)showViewController
领取专属 10元无门槛券
手把手带您无忧上云