用户登录
用户注册

分享至

iOS 代理(Delegate)

  • 作者: 倾尽一世柔情丶
  • 来源: 51数据库
  • 2021-08-26

iOS 代理(Delegate)

  • 一、说明
    • 1、代理的使用
  • 二、代码实现

一、说明

1、代理的使用

一般用于逻辑和UI的交互。例:逻辑上增加了50金币,此时需要在UI上更新金币的显示。或者需要调用其他UIView,此例用于5秒后调用显示AlertView

创建名为DelegateDemo的class文件继承自NSObject

二、代码实现

DelegateDemo.h
//
//  ViewController.m
//  iOS 代理
//
//  Created by MangoChips on 2020/10/25.
//  Copyright ? 2020 MangoChips. All rights reserved.
//

#import <Foundation/Foundation.h>

//协议定义
//定义一个代理协议 DelegateDemoProtocol 及代理方法 showDelegateAlertView
@protocol DelegateDemoProtocol <NSObject>

-(void)showDelegateAlertView;//此代理方法为 实现具体功能的方法

@end

NS_ASSUME_NONNULL_BEGIN

@interface DelegateDemo : NSObject

//遵循协议的一个代理变量定义
@property(nonatomic,weak) id<DelegateDemoProtocol> delegateDemoProtocol;

-(void)startTimer;//暴露给外部调用

@end

NS_ASSUME_NONNULL_END

DelegateDemo.m
//
//  ViewController.m
//  iOS 代理
//
//  Created by MangoChips on 2020/10/25.
//  Copyright ? 2020 MangoChips. All rights reserved.
//

#import "DelegateDemo.h"

@implementation DelegateDemo

//5秒后更新UI(或金币增加更新UI面板显示)
-(void)startTimer{
    
    [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerProtocol) userInfo:nil repeats:NO];
}

-(void)timerProtocol{
    
    [self.delegateDemoProtocol showDelegateAlertView];//使用代理更新UI界面
}

@end

ViewController.m
//
//  ViewController.m
//  iOS 代理
//
//  Created by MangoChips on 2020/10/25.
//  Copyright ? 2020 MangoChips. All rights reserved.
//

#import "ViewController.h"

#import "DelegateDemo.h"

@interface ViewController ()<DelegateDemoProtocol>//需先遵循协议

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    DelegateDemo *delegateDemo = [[DelegateDemo alloc] init];
   delegateDemo.delegateDemoProtocol = self;
   [delegateDemo startTimer];
}

//"被代理对象"实现协议声明的方法,由"代理对象"调用
-(void)showDelegateAlertView{
    NSLog(@"5S After");
    
    //UIAlertView已经被遗弃使用,真机可以运行,模拟器会崩溃。log正常输出
    UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"5s 时间到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil];

    alert.alertViewStyle=UIAlertViewStyleDefault;
    [alert show];
    
}
@end

git地址

软件
前端设计
程序设计
Java相关