iOS中UIPopoverController使用详解 一、引言 UIPopoverController是Pad设备中常用的一种视图控制器,其在UI表现上为在当前视图控制器上面弹出一个子视图控制器...UIPopoverController只能用于iPad,在要兼容iPad和iPhone的项目中,需要根据设备类型使用两套代码。...二、UIPopoverController的使用详解 首先UIPopoverController是一个容器控制器,其中需要承载一个ViewControler作为内容视图。.../* 默认情况下,当视图控制器弹出时,点击界面上的其他位置,视图控制器会被隐藏 如果需要当视图控制爱弹出时界面上的其他控件依然可以进行用户交互,则需要将这些UI控件设置进这个数组中 */ @property...(5_0); 三、自定义UI展现的UIPopoverController 通过设置UIPopoverController对象的popoverBacjgroundViewClass属性可以将一个自定义的类作为控制器的背景视图
在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) 提供的代码和思路
UIViewController *)master withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController...2、导入几张素材图片,用来在详细控制器中显示。...所有的文件截图为: 3、下面就是具体的代码创建了: //在AppDelegate.m文件中: 导入头文件并声明必要的属性,同时实现分割控制器的协议 #import "AppDelegate.h" #import...//创建右侧导航栏控制器 UINavigationController *DetailNavigationController = [[UINavigationController alloc...#pragma mark - //选中单元格时,设置详细控制器中的内容 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath
iPad开发简单介绍 iPad开发最大的不同在于iPhone的就是屏幕控件的适配,以及横竖屏的旋转。 Storyboard中得SizeClass的横竖屏配置,也不支持iPad开发。...1.在控制器中得到设备的旋转方向 在 iOS8及以后,屏幕就只有旋转后屏幕尺寸之分,不再是过期的旋转方向。...:duration animations:^{ }]; } 2.iPad中Modal弹出控制器的方式和样式 Modal常见有4种呈现样式 控制器属性 modalPresentationStyle...的使用 案例: 情景① 在导航栏上添加leftBarButtonItem按钮,然后弹出UIPopoverController 创建UIPopoverController控制器的内容控制器添加到UIPopoverController...(默认控制器有多大就显示多大)(120, 44 * 3) UIPopoverController的方法popoverContentSize 内容控制器中设置的方法 self.preferredContentSize
导航栏左上角的back按钮是附着在UINavigationController的UINavigationBar里自带的一个返回按钮,导航栏自带的back按钮的图层结构如下图所示。...self.navigationController.interactivePopGestureRecognizer.enabled = NO; //禁用侧滑手势 1.2 侧滑使用注意 侧滑手势在使用中需要注意的一点就是在项目开发中...,我们一般是采用的UITabBar + UINavigationController架构,对于每一个UITabBar的item模块,我们都定义一个UINavigationController对该item... 中添加按钮,然后添加按钮的点击功能即可。...,如果你上一级设置的backBarButtonItem的标题过长(没有设置则默认是上一级标题),那么系统可能会自动用“Back/返回”来代替返回按钮中的标题。
> UIAlertController>> 跟踪代码后,发现它在调用UIPopoverController的presentPopoverFromRect方法后,直接就调用了popoverControllerDidDismissPopover...方法 通过搜索“ios8 ipad UIPopoverController ”找到了这个链接(UIPopoverController not presenting in iPad iOS 8),一看到stackoverflow.com...中午吃过饭,再看那个crash的地方 cocos2d-x中的CCDictionary.cpp objectForKey方法的断点挂掉了 ?...当我准备放弃的时候,突然却想到新功能中主界面有一个功能上面有调用swf进行特效的显示,然后我看了一下它被隐藏了。那我想既然隐藏了,那就不要让它play嘛,结果试了一下,嗯,不崩溃了!...日志显示其实游戏已经启动了,都开始请求CDN上的资源了,只是界面还停留在重启那个界面,但崩溃的点却挂在了CCDictionary.cpp中。
在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
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]; 注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图
引: 很多人知道可以用Category给已有的类添加一些新方法,但是不同于swift中的extension,Objective-C中的Category(类别)是不支持直接添加属性的,那如果就是需要添加新的属性怎么办呢...有一个办法,使用Runtime中的关联对象技术就可以实现。...,在使用的时候,只需要import你创建的Category,在使用的时候还是使用原来的类,但是你会惊奇的发现他支持你自己在Category中添加的方法。...在工程中按住command+N来添加新文件,选择Objectiv-C File: 在出来的界面中的File Type选择Category,就是创建类别文件了,File填写我们要加在类别尾巴上的名字,Class...结 以上就是给Category添加属性的方法啦,不难,只要了解Runtime中的关联对象技术就可以轻松达到了。
2、Controller 的页面管理 上文提到,iOS中通过Controller(控制器)来管理View的绘制逻辑,那么具体是如何实现的呢? ...在iOS中,有两类ViewController: 一类用来展示内容,例如UIViewController,UITableViewController 一类用来作为容器,例如UINavigationController...3、多页面栈的管理方法 有了上文的铺垫,接下来可以更加细致地介绍iOS中多页面栈的管理方法。正如之前提到的,多页面即多个View。...iOS中采用容器类的ViewController来管理多个ViewController,而每个ViewController又对应着自己的View,从而实现统一管理。...一张图概括NavigationController的结构 3.2 通用的页面切换方式 容器类的ViewController通过一个特定的结构来实现多层级管理,但并不是所有页面都能确保是在同一个容器中
下面是swift书写的时候的两个方法,其实这里不是教大家怎么样写的这个问题,我是想通过这两个不同语言的进行的一个比较,向大家找他们之间“想法”上的一些相同点,这样子我们学习swift的时候,就可以更加的游刃有余...我们熟悉OC这门语言,找到他么想法上的相同点了,你也就可以利用OC来学习swift了。...(rootViewController: vc)) } 下面是我们熟悉的OC的写法 HomeViewController * home =[[HomeViewController...alloc]init]; home.title=@"首页"; home.tabBarItem.title=@"首页"; UINavigationController * na...@[na,na1,na2,na3]; 通过上面简单的对比,希望你能看到他们思想上的相同点,有些东西你悟出来的比我告诉你的更好!!!
新创建项目目录 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
UINavigationController 利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用 UINavigationController...的使用步骤 初始化UINavigationController 设置UIWindow的rootViewController为UINavigationController 根据具体情况,通过push方法添加对应个数的子控制器...:(id)sender; // 这个sender是当初performSegueWithIdentifier:sender:中传入的sender 调用Segue对象的- (void)perform;方法开始执行界面跳转操作...如果segue的style是push 取得sourceViewController所在的UINavigationController 调用UINavigationController的push方法将...destinationViewController压入栈中,完成跳转 如果segue的style是modal 调用sourceViewController的presentViewController方法将
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
在很多的应用中,基本都是使用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
只是其中管理的对象是controller,通过push与pop进行controller的切换,UINavigationController是将这些控件(UINavigationBar,UINavigationItem...BOOL toolbarHidden; 7、获取底部工具条 @property(null_resettable,nonatomic,readonly) UIToolbar *toolbar; 8、获取导航中的返回手势对象...(iOS7之后,在导航中右划会进行pop操作,设置这个的enable可以控制设置手势是否失效) @property(nullable, nonatomic, readonly) UIGestureRecognizer...UIViewController *)viewController animated:(BOOL)animated; 这个方法是为了iOS方法的命名统一,在导航中,其作用和push一样 - (void)...:(UINavigationController *)navigationController; (5)下面两个方法可以设置导航的转场动画 - (nullable id <UIViewControllerInteractiveTransitioning
,所以需要在载入时把父级导航条做隐藏处理: 1.2 navigationItem 在含有导航条的ViewController中,VC的navigationItem与VC.navigationController...中的 navigationItem并不是同一个对象,如下图所示。...view层级 2 开发技巧 2.1 iOS UINavigationController与UITabBarController的组合使用 http://sinye.iteye.com/blog...NavigationController中,而不是内容Controller中,切记!!!...否则会导致页面切换时选中状态不准确 TabBar与导航条混用时,TabBarItem的设置是在NavigationController中,而不是内容Controller中,切记!!!
基本现在常见的应用里单一使用Navigation导航栏或者单独使用TabBar的情况已经不多见了,除非是特别专一的应用方式,否则常常会见到两种布局方式结合起来,自己在做第一个项目的时候也是遇到了这个需求...其实想法很简单,是一个多层包装的模式,也就是先分别把自己有导航需求的界面创建出来之后,分别用UINavigationController把这几个界面控制器包装起来,然后初始化一个一个TabBar包含几个...Navigation,每个Navigation再包含各自的界面控制器的结构,代码如下: //创建两个自己的界面控制器 ViewControllerOne *one = [[ViewControllerOne...*NavViewOne = [[UINavigationController alloc]initWithRootViewController:one]; UINavigationController...此外,导航栏的标题可以在各个页面中自行设置,比如在viewDidload方法中,如下: self.title = @"标题" 要设置各个界面的tab样式,可以在initWithNibName方法中加入如下代码
ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例。...手势封装在第三方类库中,程序如下。 ...1.在中心视图 控制器中添加头文件 #import "UIViewController+MMDrawerController.h"//第三方封装的头文件 #import "MMDrawerBarButtonItem.h..."//第三方封装的头文件 #import "LeftDrawerTableViewController.h"、、左视图头文件 2.在viewDidLoad中实现添加左抽屉控制按钮的方法 [self...setupLeftMenuButton];//在viewDidLoad中实现添加左抽屉 控制按钮的方法 3.在下面实现添加按钮的方法 -(void)setupLeftMenuButton {
概述 iOS页面跳转有人说是五种,其实上本质上可以分三种 一种是置换(常见的是app自动登录,根据用户是否退出,显示不同的第一个页面) 一种UINavigationController 进行push...LoginViewController; let navi = UINavigationController(rootViewController: loginViewController);...rootViewController = navi; } UINavigationController控制 //push新页面 self.navigationController?....popViewControllerAnimated(true) 这种方式和用storyboard中的拖线选push是一样的原理 //先定义segue的ID self.performSegueWithIdentifier...modal方式 就相当于一个一个桌子 push方式 就相当于摞盘子 所以push方式 打开的页面在原页面的上面,关闭的时候也只能从上往下关,不能关闭中间的一个 而modal方式 如果一个桌子上放了一碟盘子
领取专属 10元无门槛券
手把手带您无忧上云