糖果派对官方网站_可以赌钱的糖果游戏_手机版
bb电子糖果派对iOS中页面传值(正向传值与反向传值)总计

bb电子糖果派对iOS中页面传值(正向传值与反向传值)总计

作者:操作系统    来源:未知    发布时间:2020-02-05 13:58    浏览量:

像访谈量非常大的门户网站,电子商务网址,他们有那么多的数据,都用HTML页面一个个写一定不现实?所以就只一向很诧异,那个页面是怎么出来的。像JavaWeb,难道是JSP拼出来的,以为也不恐怕?所以到论坛里面求经来了。

运转和付加物的同伙平时会碰到那样的标题,不晓得应该怎么评估新设计的版面、新出的源委是还是不是是有效的,也许说是不是比原先越来越好了。大部人是因此流量的增减来评估内容的频率,施行中那几个法子并不科学,思谋在场有非常多的因素影响流量的增减,这里引进贰个页面参与度的概念作为内容功效剖断的基于。

证明:本文绝非原创,小编只是站在受人尊敬的人的肩部上海市总括网络上各位大神的笔记和博客随笔,在这里向大神们致敬!

bb电子糖果派对iOS中页面传值(正向传值与反向传值)总计。风流倜傥、页面参预度剖析

bb电子糖果派对,在iOS开荒进度中,页面跳转时在页面之间举办数量传递是很广泛的作业,大家称这一个进度为页面传值。页面跳转进程中,从超级页面跳转到二级页面包车型客车数量传递称之为正向传值;反之,从二级页面再次来到一级页面时的多寡传递称之为反向传值

产物是由一个个例外等级次序的页面组成,页面又由差异的始末结合,产物部要对产物进行优化,首先得搞领悟那些网址页面内容是还是不是抓住人。终归,优良的始末将引发报事人进一层浏览,并最终变成网址的对象,劣质的内容将导致媒体人离开网址。所以付加物部要对网址开展优化的第一步是进步网址页面加入度。


1、什么是页面到场度

有备无患职业

为了兑现页面之间传值,我们须要打算五个页面,代码布局如下图所示。当中,MainViewController为拔尖页面,SubViewController为二级页面,页面之间的跳转使用UINavigationController来完结。

bb电子糖果派对 1

代码布局

页面之间的跳转动漫如下所示,各个页面中都有三个文书编辑框,我们供给将里面多个页面文本框中的内容传递到另八个页面中。

bb电子糖果派对 2

页面之间的跳转


页面参预度是衡量网址差异页面达成网址目的进献度的二个目的。当大家对产物页面实行评估时,会要求三个评估规范,这正是页面参加度指标须求解决的标题。那么,页面到场度那些目的该怎么着总括呢?

1. 属性传值

形式描述:在从这段时间页面跳转到下一级页面以前,提前创造下超级页面,通过赋值的方法将近些日子页面包车型大巴数据付与下拔尖页面包车型地铁质量。传递形式:正向传值。

适用项景:当从一流页面push到二级页面时,二级页面要求采纳到一流页面包车型客车数据,我们需求运用到正向传值

例如,大家首先须求在二级页面中定义三个*NSStringtext**属性,用于保存一流页面传递给下一流页面包车型客车数目。在SubViewController.h中定义属性代码如下:

@interface SubViewController : UIViewController
@property (copy,nonatomic) NSString *text;
@property (weak,nonatomic) IBOutlet UITextField *textField;
- (IBAction)backJumpBtnClicked:(id)sender;
@end

接下来,须要在顶级页面按键按下时的跳转代码中将当前页面包车型客车text菲尔德中的内容通过品质赋值的法子传递给二级页面中的text属性。

- (IBAction)mainJumpBtnClicked:(id)sender {
    SubViewController *subPage = [[SubViewController alloc]init];
    subPage.text = _textField.text;
    [self.navigationController pushViewController:subPage animated:YES];
}

下一场,要求在SubViewController的viewDidLoad中装置页面中textField的内容:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    _textField.text = _text;
}

bb电子糖果派对 3

性子传值运营效果

只顾:假如您使用如下的方式开展品质传值并不可能得逞

SubViewController *subPage = [[SubViewController alloc]init];
subPage.textField.text = _textField.text;
[self.navigationController pushViewController:subPage animated:YES];

当前,小编也不明白出现这种场馆包车型大巴的确原因,不过深入分析可能是由于二级页面中的textField是从xib文件到导出的,数据weak品种,可能当时还还未分配内部存款和储蓄器的涉及产生了赋值失败。

bb电子糖果派对 4

2. 代理传值

办法描述:首先在二级页面包车型客车头文件中加多二个代理(公约)的概念,定义三个传递数据的法子,并且在二级页面包车型大巴类中增多三个代理属性;然后,在二级页面重回上一流页面在此以前调用代理中定义的数目传递方式(方法参数正是要传送的数码);最终,在超级页面中信守该代理,并实今世理中定义的措施,在格局的兑现代码上将参数字传送递给超级页面包车型客车性质。

运用处境:已经经过push的点子步入到二级页面,在从二级页面再次回到超级页面包车型大巴时候(二级页面会释放掉内部存款和储蓄器),须求在一流页面中采纳二级页面中的数据,那是就能够使用代理反向传值

第1步:在二级页面包车型地铁头文件中加多一个代理的定义。
第2步:在二级页面包车型地铁品质中增添二个代理属性。二级页面包车型大巴头文件如下:

#import <UIKit/UIKit.h>

// 声明代理
@protocol SubToMainDelegate <NSObject>
// 代理方法
- (void)transferData:(NSString*)text;
@end

@interface SubViewController : UIViewController
@property (weak,nonatomic) IBOutlet UITextField *textField;
- (IBAction)backJumpBtnClicked:(id)sender;
// 代理属性
@property (weak,nonatomic) id<SubToMainDelegate> delegate;
@end

第3步:在二级页面消失以前,调用数据传递的代理方法,通过该方法将二级页面中的数据传递给落到实处了该代理方法的目的。二级页面的得以完毕文件代码如下:

#import "SubViewController.h"

@interface SubViewController ()
@end

@implementation SubViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)backJumpBtnClicked:(id)sender {
    // 判断有没有代理以及代理是否响应代理方法
    if (self.delegate &&
       [self.delegate respondsToSelector:@selector(transferData:)]) {
        [self.delegate transferData:self.textField.text];
    }
    [self.navigationController popViewControllerAnimated:YES];
}
@end

第4步:在一级页面中服从二级页面中定义的合计。
第5步:实现代理中的数据传递形式。拔尖页面包车型大巴得以达成代码如下:

#import "MainViewController.h"
#import "SubViewController.h"

@interface MainViewController ()<SubToMainDelegate>
@end

@implementation MainViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)mainJumpBtnClicked:(id)sender {
    SubViewController *subPage = [[SubViewController alloc]init];
    subPage.delegate = self;
    [self.navigationController pushViewController:subPage animated:YES];
}
// MARK: 实现SubToMainDelegate中的代理方法
- (void)transferData:(NSString *)text{
    self.textField.text = text;
}
@end

bb电子糖果派对 5

代办传值.gif

注意: 从动漫可以见见,我们透过点击二级页面包车型大巴归来上一级开关时,可以兑现行反革命向传值。不过,假如直接点击导航栏的Back键,并不可能落成传值效果,那是因为导航栏的归来按钮未有实今世理中的方法,解决办法是加上一个自定义开关替代导航栏左边的回到按键,並且将新加上的按键selector设置为回去上一级开关的点子。

独一身份综合流量度:指UV。

3. Block传值

措施描述:在二级页面中增加二个块语句属性,在二级页面重返一流页面早先调用该块语句。在超级页面跳转二级页面早先,设置二级页面中的块语句属性就要奉行的动作(回调函数)。那样,在二级页面重返超级页面时就会调用该回调函数来传递数据。

适用处景:反向传值

第1步:在二级页面包车型客车头文件中定义三个Block属性,代码如下:

#import <UIKit/UIKit.h>
// 定义一个Block
typedef void(^SubToMainBlock)(NSString *text);

@interface SubViewController : UIViewController
@property (weak,nonatomic) IBOutlet UITextField *textField;
- (IBAction)backJumpBtnClicked:(id)sender;
// 添加一个Block属性
@property (copy,nonatomic) SubToMainBlock data;
@end

第2步:在点击重返上一流按键的事件管理代码中调用块语句传值,二级页面包车型客车贯彻文件代码内容如下:

#import "SubViewController.h"

@interface SubViewController ()
@end

@implementation SubViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)backJumpBtnClicked:(id)sender {
    // Block传值
    _data(self.textField.text);
    [self.navigationController popViewControllerAnimated:YES];
}
@end

第3步:在一流页面跳转二级页面此前,设置在二级页面实行的块语句回调函数,代码如下:

#import "MainViewController.h"
#import "SubViewController.h"

@interface MainViewController ()
@end

@implementation MainViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)mainJumpBtnClicked:(id)sender {
    SubViewController *subPage = [[SubViewController alloc]init];
    __weak typeof(self) mainPtr = self;
    // Block回调接收数据
    [subPage setData:^(NSString *text){
        mainPtr.textField.text = text;
    }];
    [self.navigationController pushViewController:subPage animated:YES];
}
@end

: 程序的运行效果与办法2代理传值的运营效果相像。

2、页面加入度的计量办法

4. KVO传值

措施描述:KVO(Key-Value-Observing,键值观看卡塔尔,即观看入眼字的值的变迁。首先在二级页面中宣示三个待观望的属性,在再次来到一流页面早前修正该属性的值。在顶级页面中提前分配并最先化二级页面,并且注册对二级页面中对应属性的观望者。在从二级页面重临上拔尖在此之前,通过更正观望者属性的值,在一流页面中就会自动物检疫查评定到那几个更改,进而读取二级页面的多少。

适用处景:反向传值

KVO使用三大步
(1卡塔尔国 注册阅览者
(2) KVO的回调
(3卡塔尔 移除观望者
如上三大步都在拔尖页面中贯彻,代码如下:

#import "MainViewController.h"
#import "SubViewController.h"

@interface MainViewController ()
@property (strong,nonatomic) SubViewController *subPage;
@end

@implementation MainViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)mainJumpBtnClicked:(id)sender {
    // 懒加载
    if (_subPage == nil){
        _subPage = [[SubViewController alloc]init];
        // 注册观察者
        [_subPage addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew context:nil];
    }

    [self.navigationController pushViewController:_subPage animated:YES];
}
// KVO的回调
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"data"]){
        self.textField.text = _subPage.data;
    }
}
// 移除KVO
- (void)dealloc{
    [_subPage removeObserver:self forKeyPath:@"data"];

}

挂号旁观者中的forKeyPath参数用于内定必要着眼的二级页面中的属性名称。
说明:代码中对于二级页面使用了懒加载的点子,创立了该页面之后,重返顶级页面时此页面并不会释放内部存款和储蓄器,由此,下二回跻身二级页面时数据保持不改变。

bb电子糖果派对 6

KVO传值.gif

先是,在二级页面中生命我们需求在一级页面中观测的性质“data”:

#import <UIKit/UIKit.h>
@interface SubViewController : UIViewController
@property (weak,nonatomic) IBOutlet UITextField *textField;
- (IBAction)backJumpBtnClicked:(id)sender;
// 添加一个观察的属性
@property (copy,nonatomic) NSString *data;
@end

接下来,在二级页面再次来到上拔尖以前,修正在一流页面中观测的品质的值:

#import "SubViewController.h"

@interface SubViewController ()
@end

@implementation SubViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)backJumpBtnClicked:(id)sender {
    // 修改属性的值,在一级页面中监听该属性
    self.data = self.textField.text;
    [self.navigationController popViewControllerAnimated:YES];
}
@end

小心陷阱:在修改观看的质量时,不能够利用简写_data = self.textField.text;即使这种写法在大家日常的利用中得以与self.data等效,然而在KVO中只要运用_data来校正data属性的值,超级页面并无法检查实验到这种改动。因而,必需选用完全的self.data情势来改正data属性的值。

留神:观望者的登记和移除要对应,假若移除时意识并未有挂号观察者,程序会crash。

事例1:访谈者延续浏览页面A、B、A,然后达到指标页面,指标转向价值为10.那么页面A、B的到场度怎么算?

5. 通知传值

方法描述:

适用途景:正向传值反向传值

上一篇:没有了
下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有