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,和,导

基础科学几乎停滞,谁限制了人类的发展?专家的猜测可能是对的

科学一直是人类探索世界的重要手段之一,自人类诞生以来,就一直在不断地探索世界的奥秘。

在这个过程中,科学家们做出了很多贡献,例如牛顿、爱因斯坦、麦克斯韦和特斯拉等,他们的成就让人类在不断发展进步的道路上得到了极大的帮助。

可是到了现代,在人类科技发展的过程中,基础科学几乎停滞,这是为什么呢?有专家猜测是因为科学家们的思维被限制了。

在探索世界的过程中,我们需要不断地打破常规思维,挑战现有的知识体系,才能够取得更大的进展。

但是现实是,很多人的思维已经被教育、传统和文化所限制,这也让他们难以接受新思想,难以创造出新的科学成果。

然而,对于那些能够跳出固有思维的科学家来说,他们的成就是不可估量的。

例如牛顿,他发现了万有引力,开启了人类对宇宙的认知之旅;爱因斯坦发表了相对论,打破了牛顿的绝对时空观,对整个科学领域的发展起到了非常重要的作用;麦克斯韦参与了电磁理论的奠基,创立了经典电动力学和麦克斯韦方程组,让人类能够驾驭电磁波;特斯拉发明了交流电系统、无线电通信技术和电动机技术,为工业和家电发展奠定了基础。

这些科学家的贡献,让人类在很多领域都得到了重大的进展。

同时,还有一些科学家在探索微观世界时做出了很多贡献,例如普朗克、玻尔、海森堡、薛定谔、德布罗意、费米、狄拉克等,他们共同创立了量子力学,这是描述微观物体的理论,解释了微观世界的奥秘。

科学需要不断地创新和突破。

历史上的科学家们并不是依靠简单的观察和研究就能够取得成功的,他们需要有勇气和毅力去挑战当时已有的理论和观点,不断进行实验和验证,最终才能够发现新的真相和规律。

这也告诉我们,在现代社会中,我们需要更多的科学家和研究者,不断地探索和发现,为人类的进步和发展做出更大的贡献。

此外,科学的发展不仅需要科学家们的努力,还需要社会各界的支持和重视。

政府需要加大对科研项目的投入和支持,为科学家们提供更好的研究条件和资源;企业和机构也需要在科技领域加大投资和研发力度,为科学家们提供更多的实践机会和平台。

而对于普通人来说,我们也应该关注科学研究的进展和成果,积极参与科普活动,推广科学知识和理念,促进科学文化的普及和发展。

科学是人类前进的不竭动力,科学家们的努力和贡献让我们对世界有了更深刻的认识和理解。

在未来的探索和发展中,我们需要不断地创新和突破,加强科研投入和支持,让科学研究成果更好地造福于人类社会。

iOS16值得更新吗

iOS16发布后,很多果粉们都在纠结要不要更新,毕竟作为小白鼠更新后是有很多BUG的。

不过,这次iOS16更新的功能并没有太多,有点小失望。

下面,我们来看看带来的iOS16更新了什么最新内容吧!iOS16更新了什么最新内容1. “个性化锁屏功能”估计是本次最大的更新,支持在锁屏界面放置日程、天气、电量、闹钟等小组件,然而都是安卓玩剩的,三星更是直呼“好家伙”。

2. 信息 App 功能升级,新增编辑、撤回、标记未读三种功能,易用性依然不如安卓。

iOS 16升级后的变化1.锁屏界面很突兀,可以添加小组件确实很方便,但是可选的小组件并不多。

2.设置壁纸功能大改,点进去之后其实是编辑小组件,壁纸需要另外设置,整体和Apple Watch更换表盘逻辑差不多。

3.截图新增重命名功能。

4.桌面滚动器改动,变得更粗了,静止的时候会变成搜索按钮,点击之后的搜索栏,由原来在屏幕顶部展示变成现在中间部分展示,更利于单手操作。

5.锁屏通知都移到了最下方,目前看着不得劲。

6.文本复制粘贴会询问是否执行操作。

总结:目前感知稍明显的就这些,iOS 16的更新基本可以等同于一次小版本更新,更新的主要内容就是锁屏,其它不疼不痒。

加入收藏
               

iOS基础界面UIViewController和导航介绍

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录