holydancer原创,如需转载,请在显要位置注明:
转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7422365
在Iphone的视图中,其实就是一个一个view,一层view上面放一层view,一个view上面放一群view,甚至UIWindow也是一个view,在网上找了一张图片很能说明这个问题:
可见我们能够看到的都是一个view视图,而我们能对其进行操作,是因为UIController和UIView都是UIResponder的子类。这时我们对视图进行操作时需要掌握几个比较重要的概念和几个常用的方法.一个是superView和subView的概念,一个是UIView和UIControl类对象的区别。
当我们生成一个独立的view视图时,往往是新建一个UIViewController的文件并伴随一个xib文件,这个xib文件中的fie's owner肯定是这个UIViewController类了,而它的Objects一般就是一个UIView对象(一张干净的画布),我们往往可以将这个UIView改为UIControl,通过修改它的Custom Class项来实现,这时这一大张画布就可以像它上面那些button之流的控件一样来响应方法了,我们在隐藏软键盘时就用到了这一点。
而superView和subView的概念更好理解,view上可以放控件,那么这个view就是这些控件的superView.而UIWindow上可以叠一层又一层的view,UIWindow就是这些view的superView.先放上去的index为0,然后依次累加。
处理superView和subView往往用到几个方法:
removeFromSuperview;//调用者为subView
insertSubview:atIndex;//调用者为superView
了解了这些我们来看一个实例,很简单,实现在根视图控制器上添加两个view(都是整页覆盖屏幕的),然后点击屏幕分别切换显示。
新建一个项目,然后添加两个UIViewController类并附带xib文件,分别取名为FirstViewController,SecondViewController;在viewController中进行如下操作:
viewController.h:
- #import <UIKit/UIKit.h>
- #import "FirstViewController.h"
- #import "SecondViewController.h"
- @interface ViewController : UIViewController
- @property (retain ,nonatomic) FirstViewController *firstViewController;
- @property (retain ,nonatomic) SecondViewController *secondViewController;
- @end
viewController.m:
- #import "ViewController.h"
- @implementation ViewController
- @synthesize firstViewController;
- @synthesize secondViewController;
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- firstViewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
- secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
- [self.view addSubview:firstViewController.view];
- [self.view addSubview:secondViewController.view];
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- @end
以上代码实现了在viewDidLoad中声明两个对象,然后添加到主视图上,这样在打开模拟器时会看到secondView的视图(后添加的在上面,index为1);
然后在FirstViewController.xib文件中将View的Custom Class发为UIControl,背景改一下,贴个label内容为1;
在FirstViewController.h中添加一个输出口:
- #import <UIKit/UIKit.h>
- @interface FirstViewController : UIViewController
- -(IBAction)clickH:(id)sender;
- @end
在FirstViewController.m中进行如下操作:
- #import "FirstViewController.h"
- @interface FirstViewController ()
- @end
- @implementation FirstViewController
- -(IBAction)clickH:(id)sender
- {
- [self.view.superview insertSubview:self.view atIndex:0];
- //将当前的view放到最底部。
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- // e.g. self.myOutlet = nil;
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation == UIInterfaceOrientationPortrait);
- }
- @end
这样就利用insert方法在点击该视图时将其放入底部,另一个视图就显示出来了,在secondViewController中进行同样的操作,就会实现初始化后点击屏幕来回切换的效果。当然,这是在两个视图的情况下,只是两个不停的换位置的效果,demo用于理解方法,如果是多视图大应用的话常常要进行remove操作,这样会提高效率。
关键字:IOS ,Iphone 开发 ,基础 ,入门 ,superView ,subView ,insertSubview ,removeFromSuperview ,手动多视图切换
相关推荐
场景是这样的,一个页面由多个不同的展示元素组成,考虑到可维护性和扩展性,这些元素可以划分成从上至下排列的多个分组,一个分组就是一个自定义的 subview ,每个 subview 实现各自内部的展示逻辑,并且有以下特点...
使用这个类,您可以制作由多个视图、表格或集合视图组成的单个滚动视图,而不会损失性能或浪费设备内存。 可以在我的博客文章中找到有关此类及其内部工作原理的更详细说明: 用法 用法很简单。 您可以使用公开的...
但是touch在各个UIView中传递的时候,区域时限制在view的frame内,此处包含两个信息:1、在当前view的frame以外所做的操作是不会传递到该view中的,这一点很容易理解。2、如果touch事件是发生在当前view的frame以外...
实现左右滑动屏幕功能切换栏目,可以动态加载内容,可以直接移植到项目中。
一个包装视图,允许用户以自然的方式在两个位置之间移动子视图。 可以通过触摸动画或控制过渡。 动画可以随时中断,控制权返回给用户。 视频 用法 设置空间视图。 // Layout UBRSpaceView * spaceView = [...
StretchHeaderthis is a stretchable view in tableviewHeader,enlarge the view这是一个可拉伸的view,...实现该方法--view:是放拉伸的背景图片,也可以自定义一个UIView。subview:放在view之上的,可自定义subVi
使用一句代码为UIbutton增加不同状态的配置(borderColor, titleLabelFont, backgroundColor,subView) 最新代码请移步github: https://github.com/spWang/UIButton-State 如果在使用过程中发现问题,请联系我,...
//判断这个视图是否是他的父视图有 if([_imgView isDescendantOfView:cell]){ [_imgView removeFromSuperview]; } //让键盘放弃第一响应,也就是让textfield不再处于活动状态,键盘就会下去 //...
Django-interactive 旨在通过让应用程序开发人员定义subview和自动生成能够动态呈现这些部分视图的客户端 JavaScript 存根来解决这个问题。 设计目标 这个库应该让简单的事情变得容易,复杂的事情仍然可能。 与任何...
高德地图 iOS SDK 支持的地图覆盖物有:标注、折线、多边形、圆、大地曲线和图片覆盖物,您可以 在地图上添加这些覆盖物来丰富地图显示,通过设置其属性实现各种功能,优化地图体验。 说明:以下示例代码都基于“显示地图...
骨干扫描骨架视图包装(Spinelli的SwipeView的一个分支),允许使用手动定义的子视图轻松呈现集合。例子用法如下: var SlideList = SwipeView.extend({ subview: SlideDetail, swipeview_options: { loop: true }})...
它是INAppStoreWindow的直接替代品,后者根据OS X版本在运行时在WAYWindow和INAppStoreWindow之间切换其类实现。 该类背后的动机是在OS X 10.10 Yosemite中使用INAppStoreWindow运行应用程序时出现以下警告: ...
iPhone开发之UISearchBar学习是本文要学习的内容,主要介绍了UISearchBar的使用,不多说,我们先来看详细内容。关于UISearchBar的一些问题。 1、修改UISearchBar的背景颜色 UISearchBar是由两个subView组成的,一个...
源码DTAlertView,该源码可以实现了让我们自定义的警示图的功能的,而且还可以有常见的弹出视图的效果等,同时也很好地兼容了IOS7的,和可解决iOS 7中UIAlertView不能添加Subview的问题等。 Custom alert view ...
另外,您可以通过自动完成第一个或两个字符来轻松找到约束方法。 您可以替换: view. addSubview (subview) subview. translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint. activate ([ ...
作者DuckDeck,源码ViewChaos,ViewChaos是一个强大的IOS UI开发工具,它可以帮助你定位View,找出它的Superview和subview,检查约束,同时也可以追踪你想要观察的View。 其中最神奇的是它可以改变VIew的边框,背景&...
BRYXStackView [!... // Add a subview to the bottom of the stack.func addSubview ( view : UIView)// Add a subview to the bottom of the stack, with padding around it.func addSubview ( view :
这个绝对不是病毒,我自己用visual basic编写的解答数独的小程序。。。。不收费哦。。欢迎大家下载使用!! 什么是数独游戏(可以参考百度百科) 数独(すうどく,Sūdoku)是一种运用纸、笔进行演算的逻辑游戏。玩家...
滑块 ...安装 克隆 ... 打开 cd SliderPlugin 在里面 npm install 跑步 npm run start 模型-查看-演示者 模型-负责滑块的当前状态,存储起始值。 具有更改当前状态并返回状态的... 订阅视图中的更改并在模型中调用适当的方