以下是块语法的内部结构变量,从今天起我们开

2019-09-13 11:20栏目:大奖888官网登录
TAG:

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"IP Group", nil) message:NSLocalizedString(@"分组创设成功", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil]

[alertView show];

[self.navigationController popViewControllerAnimated:YES];

浅析ios开辟中Block块语法的妙用

实际,任何三个选拔的费用都距离多线程。而“块”block与GCD正是苹果OC语言中四线程的为主。 一.块的内部结构 在oc中,块语法以闭包的款式存在,每二个Objective-C对象都攻下着某些内部存款和储蓄器区域。块小编也是八个对象,在寄存块的对象内部存款和储蓄器区域中,第八个变量是指向Class的指针,该指针叫做isa。别的内部存款和储蓄器里含有块对象不荒谬运作所需的各个音讯。 以下是块语法的内部结构变量。 1.void* isa(指向class的靶子指针) 2.int flags 3.int reserved 4.void(*)(void*,……) invoke(函数指针) 5.struct* descriptor(结构体描述) 依据上述块语法的内存结构可见,在那之中最首要的正是invoke变量,这是三个函数指针,指向的就是块的兑今世码。
二.块在系统api回调中的应用
在iOS的原生api中,有众多的地点都用到了块语法。个中最广泛的重大是三个地点,三个就是数组和字典的块枚举,这种枚举格局是每一个NSArry和NSDictionary都自带的,其作用和便利性远远大于古板的for循环。

[self.p_tableArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

}]

另叁个广大的地方就是页面跳转present之后的达成回调,

[self presentViewController: animated: completion:]

三.块语法在UIAlertView中的聚焦代码

UIAlertView是二个弹窗控件,有局地开关,最广大的正是认同和注销,UIAlertView有一个代理管理这么些开关,当客商点击后,该代理能够捕获开关的下标,然后顾客依据下标Index写一些逻辑代码。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

快语法的首先个妙用便是足以一向在创立那几个UIAlertView控件的时候就曾经写好逻辑代码,完全不用写在上述回调中。

以下是实际落到实处。

率先步,申Bellamy(Bellamy)个全套的Block对象,依据UIAlertView的回调代理可见,该代理首要参数是一个NSInteger类型的参数,那么大家表明的Block对象能够依附代理的实际上情况来创建。

@property(nonatomic,copy)void(^p_alertBlock)(NSInteger);

其次部,在创制这么些UIAltView的地方落到实处那些全体的Block对象。

if(!self.p_alertBlock)

{

self.p_alertBlock = ^(NSInteger buttonIndex)

{

AccountViewController *acc = accc;

switch (buttonIndex) {

case 0:

break;

case 1:

if([acc.p_fmdb deleteObjc:list])

{

[acc.p_tableArr removeObjectAtIndex:acc.p_didSelect];

[acc.p_table reloadData];

}

break;

}

};

}

UIAlertView *alt = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"tip",nil) message:NSLocalizedString(@"sureDelet", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok",nil), nil];

[alt show];

那是多个刨除数据库操作的弹窗,当客户点击确认的时候删除数据库的指标,点击撤除不做其余管理。 第三步,在UIAlertView的代办中运作快。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

self.p_alertBlock(buttonIndex);

}

以此用法有八个实惠就是能够在UIAlertView还未创设此前就曾经规定了它按键的拍卖,集中代码,看起来更为的惠及和直观。

上述只是五个例证,在系统广大控件中都能够这样完结,诸如UIActionSheet等。

三.块语法代替Delegate

谈起ios的音讯布告,就必须代理Delegate。代理固然很有益于,但是落实的长河比较麻烦。倘使使用块语法的话,大家得以提前把回调函数的代码达成封装到Block中作为参数字传送递给数据层,那样子实际上在代理回调中

if(self.delegate && [self.delegate respondsToSelector:@selector(setAddressSuccess:)])

{

[self.delegate setAddressSuccess:self.accountList.remark];

}

那句话就被

Block(self.accountList.remark);所取代。

是否进一步的省心了啊?关键是您根本就不要声清代理,达成,设置代理,维护左券等等复杂的进度。

代办还大概有三个限量便是必供给对象化,假诺三个工具类是二个类的实例方法,你想在少数操作之后把数量回调给C层,这年代理就无法执行了,不过Block只不是是一个对象而已,就好像NSString一样,可以协助您兑现。

如上只是块语法在系统控件API回调中的妙用和四个类之间代理的妙用,更加多的作用还会有待在实质上支出中逐年打通发掘。

直抒胸意,畅所欲言,块语法究竟庞大到何种地步,等你用多了就驾驭了。

事实上,任何二个行使的支付都距离二十四线程。而“块”block与GCD正是苹果OC语言中八线程的着力。 一.块的内...

1.前言
事先大约的学习了Objective-C的底子语法,从明天起我们最早学习轻巧的IOS视图开拓。

假使在pop前应用的alertview会出现crash意况,小编测量检验的用机ios8.4。要出来旅游等回到后在琢磨。

2.UIAlertView入门
2.1常备弹框
采取提示视图的最佳情势,当然是接纳一定的伊始化方法:

 

[plain]

  • (void)viewDidLoad 

        [super viewDidLoad]; 
        // Do any additional setup after loading the view, typically from a nib. 
         
        //Title:这些字符串会显示在提示视图的最下边包车型地铁Title。 
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title" 
        //message:那是要给客户看的其实音信。 
        message:@"Message" 
        //delegate:大家能够传递委托对象(可选)给提醒视图。当视图状态更换时,委托对象会被布告。传递的参数对象必须进行UIAlertViewDelegate协定. 
        delegate:nil 
        //cancelButtonTitle:可选参数。这几个字符串符会展现在提示视图的打消按键上。平时有撤除按键的提示视图都以要讲求顾客做鲜明,顾客若不愿意举办该动作,就能按下撤除。这么些开关的的标是能够活动设定的,不自然会来得撤废。 
        cancelButtonTitle:@"Cancel" 
        //otherButtonTitles:可选参数。若您愿意提醒视图出现其余按键,只要传递标题参数。此参数需用逗号分隔,用 nil 做最后。 
        otherButtonTitles:@"Ok", nil]; 
        [alertView show]; 

- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
   
    //Title:这几个字符串会展现在提醒视图的最上边的Title。
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title"
    //message:那是要给顾客看的其实音信。
    message:@"Message"
    //delegate:大家得以传递委托对象(可选)给提醒视图。当视图状态更动时,委托对象会被打招呼。传递的参数对象必需奉行UIAlertViewDelegate协定.
    delegate:nil
    //cancelButtonTitle:可选参数。这么些字符串符会显示在提醒视图的吊销开关上。平常有撤消开关的唤起视图都以要讲求客户做确定,顾客若不情愿进行该动作,就能按下撤销。那几个按键的的标是能够自动设定的,不必然会议及展览示撤除。
    cancelButtonTitle:@"Cancel"
    //otherButtonTitles:可选参数。若你希望唤起视图出现其余开关,只要传递标题参数。此参数需用逗号分隔,用 nil 做最终。
    otherButtonTitles:@"Ok", nil];
    [alertView show];
}

运营结果:

 

 图片 1  

 

2.2代理弹框
.h文件:

[plain]
@interface ZYAlertYesOrNoViewController : UIViewController<UIAlertViewDelegate>//增加UIAlertViewDelegate代理 
-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; 
@end 

@interface ZYAlertYesOrNoViewController : UIViewController<UIAlertViewDelegate>//增加UIAlertViewDelegate代理
-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
@end.m文件:

[plain]

  • (void)viewDidAppear:(BOOL)animated{ 
        [super viewDidAppear:animated]; 
        //初始化UIAlertView 
        self.view.backgroundColor = [UIColor whiteColor]; 
        UIAlertView *alertView = [[UIAlertView alloc] 
                                  initWithTitle:@"Rating" 
                                  message:@"Can you please rate our app?" 
                                  //为作者加多代理 
                                  delegate:self 
                                  cancelButtonTitle:[self noButtonTitle] 
                                  otherButtonTitles:[self yesButtonTitle], nil]; 
        [alertView show]; 

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    //初始化UIAlertView
    self.view.backgroundColor = [UIColor whiteColor];
    UIAlertView *alertView = [[UIAlertView alloc]
                              initWithTitle:@"Rating"
                              message:@"Can you please rate our app?"
                              //为自个儿增添代理
                              delegate:self
                              cancelButtonTitle:[self noButtonTitle]
                              otherButtonTitles:[self yesButtonTitle], nil];
    [alertView show];
}
[plain]

- (NSString *) yesButtonTitle{ return @"Yes"; 

  • (NSString *) noButtonTitle{ return @"No"; 

    //判别顾客按下的是Yes依然No 
    -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
            NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
            if ([buttonTitle isEqualToString:[self yesButtonTitle]]) { 
               NSLog(@"User pressed the Yes button."); 
            }else if([buttonTitle isEqualToString:[self noButtonTitle]]){ 
                NSLog(@"User pressed the No button."); 
            } 

- (NSString *) yesButtonTitle{ return @"Yes";
}

  • (NSString *) noButtonTitle{ return @"No";
    }
    //判别客商按下的是Yes照旧No
    -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
            NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
            if ([buttonTitle isEqualToString:[self yesButtonTitle]]) {
               NSLog(@"User pressed the Yes button.");
            }else if([buttonTitle isEqualToString:[self noButtonTitle]]){
                NSLog(@"User pressed the No button.");
            }
    }
    当点击Yes按钮后
    运维结果(调整台显示):

2013-04-22 11:21:33.675 UIAlertViewTestDemo[1147:c07] User pressed the Yes button.

 

2.3带输入框的Alert

[plain]
//登入弹出框:一个文本输入框,贰个密码框 
UIAlertView *alertView = [[UIAlertView alloc] 
                              initWithTitle:@"Password" message:@"Please enter your credentials" delegate:self 
                              cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 
//设置AlertView的样式 
[alertView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput]; 
[alertView show]; 

//登录弹出框:一个文本输入框,二个密码框
UIAlertView *alertView = [[UIAlertView alloc]
                              initWithTitle:@"Password" message:@"Please enter your credentials" delegate:self
                              cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
//设置AlertView的样式
[alertView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[alertView show];
运行结果:

 

图片 2

 

UIAlertView样式:

[plain]
type enum{ 
UIAlertViewStyleDefalut=0;//暗中认可样式 
UIAlertViewStyleSecureTextInput,//密码框 
UIAlertViewStylePlainTextInput,//文本输入框 
UIAlertViewStyleLoginAndPasswordInput //有登录效果的提示框 
}UIAlertViewStyle 

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于大奖888官网登录,转载请注明出处:以下是块语法的内部结构变量,从今天起我们开