iOS学习之UIView+UIViewController

—————————————————————— UIView  

//已经有强指针指向它了。 所以不需要用strong  用weak 可以减少很多不必要的问题。

@Property (nonatomic , weak )IBOutlet UILabel * label

1.系统调用

2.控制器的view 加载完毕的时候调用。

3.控件的初始化,数据的初始化 。(懒加载)

-(void)viewDidLoad {

[super viewDidLoad]

}

UIView:

它是一个控件,  它是所有控件的父类..每一个控件其实都是一个容器。可以将其他控件放到该控件的内部。

比较常见的还是将UIView 作为容器。每一个控制器中都有一个UIView。控制器本身是不可见。

能够看到的是控制器的View 。每一个控制器中都有一个UIView 属性。

控制器中管理的所有控件都是该控件的子控件。

在sb中只能用UIView 来装, 只能用代码。

常见属性:  UIView  superview ; // 父视图  【当前视图所在的父视图】

NSArray  subviews

NSInteger  tag  父控件可以通过tag 来找到对应的子控件。

常见方法: addSubview : 添加一个子控件的view。

removeFromoSuperview 将自己从父控件中移除

tag  根据tag 拿到对应的UIView        【设置  红色的tag = 1 ; UIView *redView = [self.view viewWithTag: 1 ] ; 】

少使用,效率非常差,用起来很混乱。




//自定义View xib的用法 (项目名称:设置文件头  滚动广告  五张图片 )

步骤(1)创建 新文件 userInterface  中的 empty 文件  取名CZHeaderView

(2)xib 中加入View 4中属性size取freedom  statusBar 取None 5中取大小 W 375 H 200

加入scrollView  到View 中    设置5中 10 10 355 140

加入新View      到主View 中    设置5中 0 160 375 1  //一条线就画好了

加入新View      到主View 中    设置5中 0 200 375 1  //一条线就画好了

加入Label        到主View 中    设置5中 10, 170,100,21  label.text= 猜你喜欢

(3)//封装起来(自定义View)

创建一个类 CZHeaderView  然后继承 UIView//名字最好和xib的取名一样

(4)点击父View 设置自定义类型 中设置3中 Custom Class 中class 设置成 CZHeaderView

(5)连线  option+ Command + 回车  在CZHeaderView.m 中连线

//              手动写入代码

@interface CZHeaderView()

//scrollView连线

@property(weak,nonatomic) IBOutlet UIScrollView *scrollView;

@end

(6)//如何加载  回到 ViewController.m 中

导入头文件 #import"CZHeaderView.h"

-(void)viewDidLoad  //原有的代码 这行不需要自己写入

{

self.tableView.tableHeaderView = [CZHeaderView headerView];//手动写入代码

}

(7)//回到 CZHeaderView.h 中

+(instancetype)headerView;//手动写入代码

//回到 CZHeaderView.m 中

//类方法 快速初始化对象

+ (instancetype)headerView

{

CZHeaderView *headerView = [[[NSBundle mainBundle] loadNibNamed:@"CZHeaderView" owner:nil options:nil] lastObject];

return headerView;

}

//当xib中的控件加载完成会调用此方法

- (void)awakeFromNib

{

CGFloat iconW = self.scrollView.frame.size.width;

CGFloat iconH = self.scrollView.frame.size.height;

for (int i = 0; i < 5; i++) {

NSString *imgName = [NSString stringWithFormat:@"ad_%02d",i];

UIImageView *iconView = [[UIImageView alloc] init];

[self.scrollView addSubview:iconView];

iconView.image = [UIImage imageNamed:imgName];

CGFloat iconX = i * iconW;

CGFloat iconY = 0;

iconView.frame = CGRectMake(iconX, iconY, iconW, iconH);

}

self.scrollView.contentSize = CGSizeMake(5 * iconW, 0);

}

IOS是一个闭源系统,从uiview跳转到uiviewcontroller需要有特殊的工具,跳转是在控制器之间发生的,应该是由一个控制器跳转到另一个控制器,跳转后就可以把当前的控制器默认的View添加到窗口上,而不是由UIView跳转到控制器,不要犯这样的错;

控制器跳转办法:

1、用UINavigationController 的pushViewController

2、用self的presentViewController

3、再就是用storyBoard的segue进行跳转

self.cover.alpha = 0.3;

常用的方法总结:

1.懒加载

作用: 用到的时候再创建。

01. @Property (strong ,nonatomic) MIOViewController *vc;

02. -(MIOViewController *)vc

{

if(!_vc)

{ self.vc =[ [MIOViewController alloc]init];

self.vc.view.frame = CGRectMake(100,100,100,100);

}

}

知识点: 1. 一个控制器的view 是可以随意调整尺寸和显示位置的。

2.  一个控制器的view 是可以随意添加到其他view 中

3 . 如果将一个控制器的view 添加到其他view中 那么要想办法保证控制器不被销毁,

4. 原则: 主要view  在 view所在的控制器必须得在,这样才能保证view 内部的数据和业务逻辑正常

知识点:如果一个view  添加到另一个viewController  上添加千次万次, 也只会添加一次,它会自动判断。 比如:【self.view addsubview:test.view】;

知识点: 从控制器 移除的view  并不会销毁(死了),只要这个控制器还在, 它就还活着, 只是暂时移除出去了。

【self.view  removeFromSupview】;  // 暂时从父控件移除,暂时看不见而已。是否销毁看是否有强指针指着它。

知识点: 控制器中又有控制器 【UIViewController  -> UIViewController】

在  控制器 A 中  添加另一个tableview控制器B

存在的问题:

tableview 能活到现在是因为 [ self.view addSubview:test.view]; 被加入进去,所以能够显示出来。

但是 控制器 HMTestViewController 不能活到今天,因为它是个局部变量。

所以它死了。数据源也就死了。意味着没有人给它数据。所有没有数据

因为它的数据源是 test.view.dataSource = test ;  但是死了就会变成  test.view.dataSource = nil ;

需求: 控制器的view 还在,但是view 上面的数据不显示,极大可能是因为:控制器提前被销毁了。

解决方式:

加入强引用:@property (strong,nonatomic) HMTestViewController *test;

self.test = test

就能够看到数据了。

问题: EXC _ BAD_ACCESS  经典错误  坏内存访问

控制器死了,view 还在 ; view中的 button 被点击的时候。  相当于让死人管理里面的控件,所以会成为坏内存。

解决。 控制器要强引用。

@property (strong,nonatomic) UIViewController *viewControlelr;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,460评论 1 14
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,607评论 1 9
  • 感恩自己能以身作则,言传身教!同时也感恩饰品店老板的宽容大度!今天女儿在饰品里看饰品,拿了一个皇冠...
    静若处子阅读 302评论 0 0
  • 29号,星巴克中国是不是推出了一款超文雅的咖啡“馥芮白”,于是这几天,朋友圈有人贴图,或是炫耀,或是表示不明白,因...
    王子路阅读 522,808评论 66 231
  • 现在还有没入睡的朋友吗?我本来是早早关机想睡觉的,结果失眠了,重新打开手机。看到了高中F4里小伙伴给我发的足足占了...
    元宝脸plus阅读 238评论 2 0