iOS基础界面UIViewController和导航介绍

作者:小菜 更新时间:2025-02-27 点击数:
简介:iOS基础界面就是通过UIViewController展示的。

首先区分content controller和container controller的区别。

co

【菜科解读】

iOS基础界面就是通过UIViewController展示的。

首先区分content controller和container controller的区别。

content controlller就是展示我们当前页面的controller,而container controller就是一个管理content controller的容器,基本就是UINavigationController和UITabbarController,本身它也是继承UIViewController,一个UIViewController压栈就是把它加入到container controller的view上。

下面说一下UIViewController的生命周期:

1. -(void)loadView; 这里用来加载controller的view,一般我们都必须调用[super loadView]来完成对view的加载,当然如果不需要用self.view也可以。

然后再对我们需要的子view进行生成和布局。

2.- (void)viewDidLoad; 这里代表view已经加载完成,一般用来处理数据model之类的。

3.- (void)viewWillAppear:(BOOL)animated; Controller将要被加入到当前window的回调,每次push或pop到当前controller就会回调这个函数,代表界面将要展示出来。

4.-(void)viewDidAppear:(BOOL)animated; Controller已经被加入到当前window,也就是push、present或pop的动画已经完成。

{可能被大多数人忽略的是,在每次调用viewWillAppear或viewDidAppear,系统都会调用一下两个函数:

(1)(void)viewWillLayoutSubviews 这个可能很多人忽略了,是5.0才增加的函数,界面将要对子view进行布局。

当通话或录音状态中,状态栏下移,也会回调这个函数。

(2)-(void)viewDidLayoutSubviews 这个跟4对应,也是5.0增加的函数,对子view布局完成。

}

一般在上面4个函数,我们已经可以完成界面的展示。

记得它们的先后顺序是必须的。

至于收到内存警告,在6.0等不同版本controller的不同回调我之前已经介绍过了,就不再介绍了。

关于Container Controller:

这里就只说介绍UINavigationController,本身它就是继承UIViewController,所以它具有上面所说的生命周期。

至于什么东西应该放在viewController,什么应该放在navgationController呢,这里说说我的理解。

因为navgationController就是管理controller的容器,所以它处理的应该就是controller的关系。

并且在某种意义上,它里面的controller就相当于它的一个子view,所以在navgationController的操作就能控制它里面的每个controller。

下面以现在比较流行的手势导航为例:(也就是在二级页面向右滑动就能返回)

@interface TestNavigationController()

{

UIPanGestureRecognizer*_panGesture; //手势导航的recognizer

CGPoint_panStartPoint; //记录开始滑动的point,只有滑动到一定宽度才开启导航

}

@property(nonatomic,retain)UIPanGestureRecognizer*panGesture;

@end

@implementationTestNavigationController

@synthesizepanGesture =_panGesture;

- (void)viewDidLoad

{

[superviewDidLoad];

//在navgationController的view添加手势,也就是为每个当前的controller添加了手势

[self.view removeGestureRecognizer:self.panGesture];

UIPanGestureRecognizer*panGesture = [[UIPanGestureRecognizeralloc]initWithTarget:self

action:@selector(handlePanGesture:)];

panGesture.minimumNumberOfTouches=1;

panGesture.maximumNumberOfTouches=1;

panGesture.delegate=self;

self.panGesture= panGesture;

[panGesturerelease];

[self.view addGestureRecognizer:self.panGesture];

}

-(void)handlePanGesture:(UIPanGestureRecognizer*)pan

{

//记录开始滑动的point

if(pan.state==UIGestureRecognizerStateBegan){

_panStartPoint= [panlocationInView:self.view];

}

//在滑动结束,判断滑动的距离是不是适合宽度,处理是否返回上级页面

if(pan.state==UIGestureRecognizerStateEnded) {

CGPoint_endPoint = [panlocationInView:self.view];

if(_endPoint.x-_panStartPoint.x>70.0f){

//二级页面就能滑动返回

if([self.viewControllerscount] >1){

[selfpopViewControllerAnimated:YES];

}

}

}

}

#pragma mark UIGestureRecognizerDelegate method //手势的delegate,处理一些同时进行的手势操作

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer

{

//一般情况下,如果上下滑动幅度太大,应该就是在滑动controller的tableview之类的,就不开启滑动导航

if(gestureRecognizer ==self.panGesture) {

CGPointtranslation = [(UIPanGestureRecognizer*)gestureRecognizertranslationInView:self.view];

return((fabs(translation.x) /fabs(translation.y) >5.0f) ?YES:NO);

}

return YES;

}

当我们把appDelegate的window.rootViewController设为TestNavigationController,就可以很方便快捷地实现滑动手势导航功能。

下面说一下静态视图modelViewController,通常我们就是用

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion压入一个模态视图。

其实静态的概念就是它入栈的方式和动画不同而已。

需要注意的是,一个navgationController不可以push一个navgationController,但是可以present一个navgationController。

另外,无论是一个viewController,还是navgationController,都可以present一个modelViewController,并且modelViewController并不加入到navgationController的导航栈中。

所以navgationController的topViewController和visibleViewController是不同概念的。

topViewController就是导航栈stack的栈顶,也就是不包括modelViewController,而visibleViewController是当前展示的viewController,如果有模态视图就是模态视图,否则就是topViewController。

最后用一句话总结, A viewController is a set of views, A navgationcontroller is a set ofviewControllers.

iOS,基础,界面,UIViewController,和,导

ios8系统使用技巧?iOS8.2b2插件版本不支持

先在线试读2345好压吧,不然原Winrar不支持DEB解压 进去DEB打开control.tar.gz 在一直进去到最深那个目录看到一个control 这是会提醒你打开方式 选择记事本 好了,最后一张你就清楚了吧,不是每个DEB都有此项选择,就不要问为什么有的DEB怎么没有IOS8.2那个字符,其实你也可以自己填入! 最简单的方法就是这样了。

更多问题请关注我们的微信进行解决 果粉助手 微信号:chaxunzs 本微信具备功能:苹果序列号保修查询,菜叶说说,苹果最新报价,共存及越狱版微信、QQ、360、快播等的在线安装,越狱及美化教程,iphone技巧

苹果ios系统降级通道?苹果迷惑操作取消降噪功能

一般来说,iOS新版本发布后,就会关闭上一个版本的验证通道,用户只能升级系统,无法降级。

iOS 14.1于10月20日正式发布,按理说不该再次上线更新通道,这个情况不知道是不是系统BUG所致。

之前的文章中,数码盖饭已经详细说了iPhone(包括iPhone13系列)手机取消了通话降噪功能,苹果仍未修复!iPhone 13系列缺乏电话降噪功能,逼用户买降噪耳机?开启“电话降噪”后能有效降低周围环境噪音,提高通话清晰度,可惜苹果已经确认,iPhone13系列“通话降噪”不是Bug,而是苹果自己移除的。

以上苹果的行为引起了巨大的争议,一种是iPhone13系列默认开启降噪的功能,让用户不用去自行选择;另外一种是苹果手机就是为了卖耳机才采用的如此策略,认为苹果手机的策略就是强制让用户去购买耳机。

如果是第二种可能性,那么苹果手机官方还是欠大家一个解释。

1月17日消息,今日iPhone Xs Max国行版竟然开放了iOS 14.1(18A8395)版本签名,用户可以降级系统了。

难道这就是苹果手机给用户的后悔药? 据悉,iPhone Xs Max国行版竟然开放了iOS 14.1(18A8395)版本签名,用户可以降级系统了,在此之前,苹果每次在推送新版iOS之后,都会关闭上一个正式版系统的验证通道,升级过的系统基本不可能降级。

昨晚就有不少的iPhone Xs Max机友在群里讨论刷机的事情,有用户表示:国航亲测,降不了,爱思请求SHSH失败,iTunes报错3194,这个的解决办法是:这个升级后你需要多刷几次,当年数码盖饭的iPhone4也是显示刷不了,一直刷一直刷,后面给我刷回ios6了。

其中还有用户表示,刷机一台绑有ID的机器,菜叶说说,刷完开机激活居然没弹出ID激活,直接激活了。

其实也不是说利用这个漏洞可以刷ID,大家要知道,有登陆 ID 和有没有打开“查找我的iPhone”又是另外一回事了,大家不要传谣。

加入收藏
               

iOS基础界面UIViewController和导航介绍

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录