码迷,mamicode.com
首页 > 移动开发 > 详细

IOS开发基础知识--碎片5

时间:2014-12-11 15:23:44      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   使用   sp   for   

二十三:addSubview和insertSubview 区别

addSubview 是将view加到所有层的最顶层

相当于将insertSubview的atIndex参数设置成view.subviews count 即

[view addSubview:oneview] == [view insertSubview:oneview atIndex:view.subviews count]

addSubview是加到最后
insertSubview是加到指定的位置


UIView* view=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 30.0, 50.0)];
    
view.backgroundColor=[UIColor redColor];
    
[self.view addSubview:view];
    
    
UIView* newview=[[UIView alloc] initWithFrame:CGRectMake(30, 0, 40, 50)];
    
newview.backgroundColor=[UIColor blueColor];
    
[self.view addSubview:newview];
    
UIView* twoview=[[UIView alloc] initWithFrame:CGRectMake(0, 50, 100, 200)];
    
twoview.backgroundColor=[UIColor yellowColor];
    
[self.view addSubview:twoview];
 

//第一个从0开始索引   
    
UIView* aview=[[UIView alloc] initWithFrame:CGRectMake(20, 20, 120, 200)];
    
aview.backgroundColor=[UIColor grayColor];
    
[self.view insertSubview:aview atIndex:2];

二十四:loaded the "XXXView" nib but the view outlet was not set 解决方案 

-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "XXXView" nib but the view outlet was not set.

查书才知道,没有做nib文件到xxxViewControler程序的关联,特此记录下来:

1, 打开nib文件

2, 点击"File‘s Owner", 按command+4,设置Class为xxxViewControler

3, 按Control+"Files‘s Owner", 里面有个默认的IBOutlet变量view, 看一下后面有没有做关联,如果没有就拉到下面的View和视图做个关联

二十五:UIViewController和UIView关系

UIViewController是视图控制器,UIView是视图,UIViewController是来控制UIView的。UIViewController就像是一个容器,它可以对其内部的对象进行操作,UIView是容器中的对象,一个容器里面可以有好多对象;
UIView工作在第一线,向用户展示表现的内容,并接受用户的交互。UIViewController相当于导演,按照计划编排属下的UIView以何种形式展现,其中包含一些花哨的技巧,如翻转、淡入淡出等。 
UIVewController的另一个功能是处理用户交互操作,注意这里我说的是"处理",当然UIViewController本身是不知道用户交互的,这就需要UIView将用户的交互操作(例如:touchesBegintouchesMoved)传递上来。一般常用的两种方法完成这种传递: 
1、[self nextResponder] touchesBegin:touches... 
2、使用Notification 

不管以何种方式,如果UIViewController得到了用户的输入,那么它应该对UIView做些改变以响应用户的输入,这里要注意UIViewController应该只改变UIView的表现,而不应该处理其它事情,
更多的操作通过Delegate来进行,关于Delegate的应用场合下次讲解消息的传递方式中一起阐述。

二十六:页面传值问题

假如要从A传到B页,可以很简单直接在B中定义一个属性,然后在页面跳转前给它赋值,实现跳转;

UserInfo* userModel=[[UserInfo alloc] init];
    
userModel.userName=self.textBox1.text;
    
userModel.age=25;
    
userModel.sex=YES;
    
    
    
//TwoController* twocroller=[[TwoController alloc]init];
   别这么写,或者传过去为空,因为视图间没有什么联系 
TwoController* twocroller= [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]
                                 
instantiateViewControllerWithIdentifier:@"TwoController"];
    //把B页的视图定义一个标识TwoController
twocroller.newuserinfo = userModel;
       
[self presentViewController:twocroller animated:YES completion:nil];

如果从A跳到B页,然后再从B页传值给A页,就可以使用委托的方式;


二十七:集合视图跟表视图

集合视图跟表视图的一些概念是不一样,比如节;实现委托的方法也是不一样;


二十八:通过Segue标识进行跳转

[self performSegueWithIdentifier:@"twoSegue" sender:self];
其中push不能直接从ViewController跳转到ViewController;

 

二十九:UIScreen(屏幕)、UIWindow(画框)、UIView(画布)、didFinishLaunchingWithOptions的概念

//didFinishLaunchingWithOptions 方法:顾名思义。在app开始运行时会调用里面的方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //返回的是带有状态栏的矩形
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
   
    CGRect bound = [[UIScreen mainScreen]bounds];  //返回的是带有状态栏的Rect
    NSLog(@"boundwith:%f    boundheight:%f",bound.size.width,bound.size.height); 
    NSLog(@"boundx:%f    boundy:%f",bound.origin.x,bound.origin.y); 
    //2012-08-03 23:21:45.716 DinkMixer[599:c07] boundwith:320.000000    boundheight:480.000000
    //2012-08-03 23:21:45.719 DinkMixer[599:c07] boundx:0.000000    boundy:0.000000

    CGRect appBound = [[UIScreen mainScreen]applicationFrame];  //返回的是不带有状态栏的Rect
    NSLog(@"appBoundwith:%f    boundheight:%f",appBound.size.width,appBound.size.height); 
    NSLog(@"appBoundx:%f    boundy:%f",appBound.origin.x,appBound.origin.y);
    //2012-08-03 23:21:45.720 DinkMixer[599:c07] appBoundwith:320.000000    boundheight:460.000000
    //2012-08-03 23:21:45.720 DinkMixer[599:c07] appBoundx:0.000000    boundy:20.000000

    //很明显状态栏占用了空间20像素
  
    MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil] autorelease];//根据nib文件的名称来创建一个视图控制器

    self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];//创建一个导航控制器,并指定该导航控制器的根视图控制器为上面建立的masterViewController

    self.window.rootViewController = self.navigationController;//窗体(window)有一个根视图控制器——这个视图控制器负责配置当窗体显示时最先显示的视图。要让你的视图控制器的内容显示在窗体中,需要去设置窗体的根视图控制器为你的视图控制器。
   
    [self.window makeKeyAndVisible];//这行代码会让包含了视图控制器视图的Window窗口显示在屏幕上。
    return YES;
}

 

IOS开发基础知识--碎片5

标签:style   blog   io   ar   color   os   使用   sp   for   

原文地址:http://www.cnblogs.com/wujy/p/4157455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!