UIday05

1.传值的方向性

如果从A界面跳转到B界面并传值,正向传值。

如果从B界面返回到A界面并传值,反向传值。

2.反向传值

VC1:

2>在VC1跳转VC2前,将自己赋值给VC2的属性。

3>在VC1声明一个属性,用来接收传值。(model)

5>重写了viewWillApear方法(每次界面显现的时候执行),将model的值->view(label)

VC2:

1>首先要保存前一个界面的引用(属性)

4>触发返回上一个界面方法时,将VC2值传给VC1的Model。

传值方式:

属性

方法

委托模式

 

"委托模式"传值方式:

1.定义一个委托协议—(1)

传值方式:属性/方法—(2)

2.委托方—(3)

创建一个属性关联被委托式(delegate)—(4)

反回前一个界面前,得到委托方的值—(9)

(textFieldvalue)->self.delegate.value = textFieldValue

3.被委托方—(5)

遵守协议—(6)

实现协议要求的属性和方法—(7)

接收到值后,将值显示在界面上—(10)

viewDidAppear -> self.myLabel.text = self.value;

4.将委托方与被委托方关联一起 —(8)

在VC3->VC2之前,vc2.delegate = self;

 

补充:

声明属性时候的关键字:

assign 基本数据类型,默认assign

weak(MRC assign)

修饰对象的引用,仅仅是指向对象,不会通知对象的引用计数器加1。如果指向的对象销毁了,那么该引用会自动置空。

strong(MRC retain)

修饰对象的引用,当该引用指向对象的时候,会通知引用计数器加1 。

copy 

修饰对象的引用,但是会将原有的对象内容复制一份,并得到新的内存地址。

 

*NSCopying 对象的复制 深复制(深拷贝)

NSString *str = [NSString alloc]init…"hello"];

NSString *str2 = [str copy];

 

引用复制 浅复制(浅拷贝)

NSString *str = [NSString alloc]init…"hello"];

NSString *str2 = str;

int i = 10;赋值 

int *p = &i;赋值(传地址)

copy

修饰对象的引用,但是会将原有的对象内容赋值一份,并得到新的内存地址。

 

NSCopying 对象的赋值  深拷贝(开辟新的内存地址)

引用的赋值 浅拷贝(内存地址一样)

char str[] = {’s’,’t’,’r’,’\0’};//可以修改

char *str2 = "str";//不可修改

char *str3 = "str";

 

4.UINavigationController(导航控制器)

4.1 是什么

是控制器UIViewController的子类,本质是一个视图控制器的控制器,是用来管理其他VC的VC。(用来管理其他的视图管理器)

4.2 有什么用

管理和控制VC的走向,比present方式更好、更清晰。

4.3 怎么用

1)创建一个UINavigationController的对象或*其子对象。并且要指定一个根视图控制器。

2)推出一个界面(VC)界面跳转

self.navigationContriller push VC2

3)返回前一个界面

a.会自动生成一个返回方式

b.指定一个事件方法返回

[self.navgaitionContriller popViewController];

4.4 内部原理

1)navi..内部维护着一个VC对象的数组

self.navigationControllers.viewControllers

将此数组当做栈来管理

栈是一种数据结构,特点是先进后出,后进先出。

2)navi必须有一个根VC,第一个被navi包含的VC。

3)push一个新界面(VC),旧的VC是不会被释放的。

4)navi会保持所有push进去的VC的引用,push一个vc其实是此VC放入到navi中的数组中。

5)当pop一个VC从navi中出来时,此vc就会被释放。

6)不能pop根VC

4.5 使用方式

传值:原理同上(present)。重构传值练习。(正、反向)

1)NavigationBar(导航栏)

导航栏分别认为三个部分,分别是左,中,右。

a.中 标题(Title默认为标题)

在具体的VC中,设置了一个属性self.title.(viewDidLoad)

当界面跳转时,默认的返回按钮,自动更新为上一个界面的标题。

b.左、右按钮

.navigationItem.leftBarButtonItem

.navigationItem.rightBarButtonItem

c.UIBarButtonItem

专门用于各种bar上的按钮,和UIButton不一样的系统按钮。

按钮的形式:

系统按钮

文字按钮

initWithTitle:style:target:action:

d.放多个按钮

.navigationItem.leftBarButtonItems…

.navigationItem.rightBarButtonItems…

e.隐藏当行控制器头

self.navigationController.navigationBarHidden = YES;

 

2)ToolsBar   工具栏

工具栏默认是隐藏的。

a.显示工具栏

self.navigationController.toolBarHidden = NO;

b.UIBarButtonItem

专门用于各种bar上的按钮,和UIButton不一样的系统按钮。

系统按钮

initWithBarButtonSystemItem:target:action:

文字按钮

initWithTitle:style:target:action:

c.向工具栏添加按钮

self.toolBarItem = @[……];

d.美工具栏的样式

Fixed:固定值

Fiexible:弹簧效果,尽可能的填补空间。

3)在一个NavigationController中,可以继续使用present,当然也可以使用NavigationController。

 

作业:

重构昨天的作业,***传值...

模拟文本创建器

界面1:有一个按钮:“创建一个文本”

当用户点击按钮后,跳转到第二个界面。

界面2:

x:[…]          y:[…]

width:[…] height:[…]

text:[…]

确定按钮

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值