首页 文章 精选 留言 我的

精选列表

搜索[ios],共10000篇文章
优秀的个人博客,低调大师

iOS mjrefresh 使用

TableViewController.h // // TableViewContoller.h // IteyeBlog // // Created by youbao on 16/10/15. // Copyright © 2016年 youbao. All rights reserved. // #import <UIKit/UIKit.h> @interface TableViewContoller : UIViewController @end TableViewController.m // // TableViewContoller.m // IteyeBlog // // Created by youbao on 16/10/15. // Copyright © 2016年 youbao. All rights reserved. // #import "TableViewContoller.h" #import "TableViewCell.h" #import "UIImageView+WebCache.h" #import "OfferEntity.h" #import "MJRefresh.h" static NSString *const IconUrl = @"http://ods5pg0qp.bkt.clouddn.com/iteyeblog/icon.png"; @interface TableViewContoller ()<UITableViewDelegate,UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (nonatomic, retain) NSMutableArray *mDataArray; @end @implementation TableViewContoller #pragma mark - init #pragma mark 初始化数据 - (NSArray *)mDataArray{ if (!_mDataArray) { OfferEntity *entity = [[OfferEntity alloc] init]; entity.iconurl = IconUrl; entity.name = @"baoyou"; entity.desc = @"IT 工程师"; self.mDataArray = [NSMutableArray array]; for (int i = 0; i<5; i++) { [self.mDataArray addObject:entity]; } } return _mDataArray; } #pragma mark - 视图管理 #pragma mark viewdidload -(void) viewDidLoad{ [super viewDidLoad]; NSLog(@"==========view did load============="); self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ [self onRresh]; }]; self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(onLoadMore)]; } #pragma mark - request #pragma mark 请求数据 static int currentPage = 0; static int defualtPageSize = 15; -(void) onRequest:(int) currIndex{ if(currIndex == 0){ OfferEntity *entity3 = [[OfferEntity alloc] init]; entity3.iconurl = IconUrl; entity3.name = @"baoyou3"; entity3.desc = @"IT 工程师3"; [self.mDataArray insertObject:entity3 atIndex:0]; }else{ } [self.tableView reloadData]; [self.tableView.mj_header endRefreshing]; if( [_mDataArray count] % defualtPageSize == 0){ [self.tableView.mj_footer endRefreshing]; }else{ [self.tableView.mj_footer resetNoMoreData] ; } } - (void) onRresh{ currentPage = 0; [self onRequest:currentPage]; } -(void) onLoadMore{ currentPage += 1; [self onRequest:currentPage]; } #pragma mark - uitableview method #pragma mark 返回有多少个Sections - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } #pragma mark 对应的section有多少个元素,也就是多少行 - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{ return [self.mDataArray count]; } #pragma mark 指定的 row 的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 100.f; } #pragma mark 每行cell内容 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //NSDictionary *item = [self.mDataArray objectAtIndex:indexPath.row]; OfferEntity *entity = self.mDataArray[indexPath.row]; NSLog(@"=================%@",entity ); static NSString * cellIdentifier = @"tableView"; TableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil){ NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil]; cell = (TableViewCell *)[nib objectAtIndex:0]; } [cell.iconImageView sd_setImageWithURL:[NSURL URLWithString: entity.iconurl ] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; cell.name.text = entity.name; cell.desctription.text = entity.desc; cell.onClick = ^(void){ NSLog(@"================="); NSLog(@"%ld",indexPath.row); }; return cell; } #pragma mark 点击行,可以做跳转 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { } @end // // TableViewCell.h // IteyeBlog // // Created by youbao on 16/10/15. // Copyright © 2016年 youbao. All rights reserved. // #import <UIKit/UIKit.h> typedef void( ^ onClick)(); @interface TableViewCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIImageView * iconImageView; @property (weak, nonatomic) IBOutlet UILabel *name; @property (weak, nonatomic) IBOutlet UILabel *desctription; @property (nonatomic, copy) onClick onClick; //@property (nonatomic, copy) void ( ^ onClick) (void); @end // // TableViewCell.m // IteyeBlog // // Created by youbao on 16/10/15. // Copyright © 2016年 youbao. All rights reserved. // #import "TableViewCell.h" @interface TableViewCell () @end @implementation TableViewCell - (void)awakeFromNib { [super awakeFromNib]; // Initialization code UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onImageClick:)]; [self.iconImageView addGestureRecognizer:singleTap]; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (IBAction)onImageClick:(UIButton *)sender{ if(self.onClick) self.onClick(); } @end 捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。 谢谢您的赞助,我会做的更好!

优秀的个人博客,低调大师

iOS sdwebimage 使用

#import "UIImageView+WebCache.h" [self.image sd_setImageWithURL:[NSURL URLWithString:@"http://ods5pg0qp.bkt.clouddn.com/iteyeblog/icon.png"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。 谢谢您的赞助,我会做的更好!

优秀的个人博客,低调大师

iOS afnetworking 使用

#import "AFHTTPSessionManager.h" AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:@"http://ods5pg0qp.bkt.clouddn.com/mysqlconsole/mysqlconsole.json" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { }success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"这里打印请求成功要做的事 %@",responseObject); NSDictionary *d = responseObject; NSLog(@"%@,%@",d[@"versionCode"],d[@"versionName"]); }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"%@",error); //这里打印错误信息 }]; 捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。 谢谢您的赞助,我会做的更好!

优秀的个人博客,低调大师

iOS - UIImageView 动画

1、UIImageView 动画 1.1 播放图片集 播放图片集 @property (nonatomic, strong) UIImageView *playImageView; self.playImageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:self.playImageView]; // 创建图片集 NSMutableArray *imageArray = [NSMutableArray arrayWithCapacity:0]; for (int i = 1; i < 30; i++) { // 添加图片 [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i]]]; } // 播放图片集 self.playImageView.animationImages = imageArray; // 设置播放的图片集(需将图片添加到数组 imageArray 中) self.playImageView.animationDuration = 29; // 设置播放整个图片集的时间 self.playImageView.animationRepeatCount = 0; // 设置循环播放次数,默认为 0 一直循环 [self.playImageView startAnimating]; // 开始播放 // [self.playImageView stopAnimating]; // 停止播放动画 效果 1.2 汤姆猫 汤姆猫 #import <AudioToolbox/AudioToolbox.h> @property (nonatomic, strong) UIImageView *playImageView; // 创建播放视图 self.playImageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; self.playImageView.image = [UIImage imageNamed:@"background.jpg"]; [self.view addSubview:self.playImageView]; // 创建功能按钮 const CGFloat viewWith = self.view.bounds.size.width; const CGFloat viewHeight = self.view.bounds.size.height; const CGFloat gap = 10; const CGFloat buttonWith = self.view.bounds.size.width / 5; const CGFloat buttonHeight = buttonWith; // 功能按钮图片集 NSArray *buttonImageNameArray = @[@"fart.png", @"cymbal.png", @"drink.png", @"eat.png", @"pie.png", @"scratch.png"]; for (int i = 0; i < 11; i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [self.playImageView addSubview:button]; self.playImageView.userInteractionEnabled = YES; if (i < 6) { // 两边功能按钮的布局 if (i < 3) { button.frame = CGRectMake(gap, viewHeight / 2 + (buttonHeight + gap ) * (i % 3), buttonWith, buttonHeight); } else { button.frame = CGRectMake(viewWith - buttonWith - gap, viewHeight / 2 + (buttonHeight + gap) * (i % 3), buttonWith, buttonHeight); } [button setBackgroundImage:[UIImage imageNamed:buttonImageNameArray[i]] forState:UIControlStateNormal]; } else { // 隐藏按钮的布局 if (i == 6){ // 头 button.frame = CGRectMake(viewWith/4, viewHeight/5, viewWith/2, viewHeight/4); } else if (i == 7){ // 肚子 button.frame = CGRectMake(viewWith/3, viewHeight/3*2, viewWith/3, viewHeight/7); } else if (i == 8){ // 左脚 button.frame = CGRectMake(viewWith/4*2, viewHeight/6*5, viewWith/6, viewHeight/7); } else if (i == 9){ // 右脚 button.frame = CGRectMake(viewWith/4, viewHeight/6*5, viewWith/5, viewHeight/7); } else{ // 尾巴 button.frame = CGRectMake(viewWith/9*6, viewHeight/7*5, viewWith/7, viewHeight/5); } // button.backgroundColor = [UIColor yellowColor]; } button.tag = 100 + i; // 设置按钮事件 [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; } // 点击按钮事件处理 - (void)buttonClick:(UIButton *)button { switch (button.tag - 100) { case 0: // fart 放屁 [self playAnimation:@"fart"]; [self performSelector:@selector(playVoice:) withObject:@"fart" afterDelay:0.5]; break; case 1: // cymbal 敲锣 [self playAnimation:@"cymbal"]; [self performSelector:@selector(playVoice:) withObject:@"cymbal" afterDelay:0.5]; break; case 2: // drink 喝牛奶 [self playAnimation:@"drink"]; [self performSelector:@selector(playVoice:) withObject:@"drink" afterDelay:0.5]; break; case 3: // eat 吃小鸟 [self playAnimation:@"eat"]; [self performSelector:@selector(playVoice:) withObject:@"eat" afterDelay:0.5]; break; case 4: // pie 撇东西 [self playAnimation:@"pie"]; [self performSelector:@selector(playVoice:) withObject:@"pie" afterDelay:0.5]; break; case 5: // scratch 抓屏幕 [self playAnimation:@"scratch"]; [self performSelector:@selector(playVoice:) withObject:@"scratch" afterDelay:1.5]; break; case 6: // knockout 头 [self playAnimation:@"knockout"]; [self performSelector:@selector(playVoice:) withObject:@"knockout" afterDelay:0.5]; break; case 7: // stomach 肚子 [self playAnimation:@"stomach"]; [self performSelector:@selector(playVoice:) withObject:@"stomach" afterDelay:0.5]; break; case 8: // foot_left 左脚 [self playAnimation:@"foot_left"]; [self performSelector:@selector(playVoice:) withObject:@"foot_left" afterDelay:0.5]; break; case 9: // foot_right 右脚 [self playAnimation:@"foot_right"]; [self performSelector:@selector(playVoice:) withObject:@"foot_right" afterDelay:0.5]; break; case 10: // angry 尾巴 [self playAnimation:@"angry"]; [self performSelector:@selector(playVoice:) withObject:@"angry" afterDelay:0.8]; break; default: break; } } // 播放动画 - (void)playAnimation:(NSString *)key { // 读取 plist 文件获取图片数量 NSDictionary *imageNumDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"TomCat" ofType:@"plist"]]; int imageNum = [[imageNumDictionary objectForKey:key] intValue]; NSMutableArray *imageArray = [NSMutableArray arrayWithCapacity:0]; for (int i = 0; i < imageNum; i++) { [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@_%.2d.jpg", key, i]]]; } self.playImageView.animationImages = imageArray; self.playImageView.animationDuration = imageNum/13; self.playImageView.animationRepeatCount = 1; [self.playImageView startAnimating]; // 播放动画 } // 播放声音 - (void)playVoice:(NSString *)key { // 添加声音 SystemSoundID soundID; AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:key ofType:@"wav"]]), &soundID); AudioServicesPlayAlertSound(soundID); // 播放声音 } 效果

优秀的个人博客,低调大师

iOS - C 应用

前言 1)操作符两端必须加空格,(每行第一个赋值语句对齐)。 2)变量名必须是英文(不能是拼音):英文、数字、下划线和美元符号。 3)等于号 == 反过来写(0 == i%4)防止少些赋值号的错误。 4)通常不省略分支括号。 1、应用 1)质数(素数):质数(prime number)又称素数,有无限个。一个大于 1 的自然数,除了 1 和它本身外,不能被其他自然数整除,换句话说就是该数除了 1 和它本身以外不再有其他的因数;否则称为合数。 2)瑞年:瑞年的条件能满足以下条件之一即可: 1> 能被 4 整除且不能被 100 整除。 2> 能被 400 整除。平年(普通年)有 365 天,瑞年有 366 天。其中,平年的 2 月份只有 28 天,而瑞年二月份有 29 天。 3)最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 void reduce(int numerator, int denominator) { int u = numerator; int v = denominator; int temp = 0; while(v != 0){ temp = u % v; u = v; v = temp; } NSLog(@"最大公约数为:u = %d", u); } 4)最小公倍数:两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。 5)阶乘:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且 0 的阶乘为 1。自然数 n 的阶乘写作 n!。 6)水仙花数:水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。 7)三角数:三角形的第一行包含一个弹球,第二行包含两个弹球,以此类推。一般来说,包含 n 行的三角形可容纳的弹求总数等于 1~n 之间所有整数之和,这个和称为三角数。 8) 冒泡排序 // 冒泡排序 for (int i = 0; i < number - 1; i++) { for (int j = 0; j < number - 1 - i; j++) { if (stu[j] < stu[j + 1]) { temp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = temp; } } }

优秀的个人博客,低调大师

iOS - Xcode 插件

Xcode 插件 Xcode 插件安装目录: ~/library/Application Support/Developer/Shared/Xcode/Plug-ins Xcode 插件大全 http://www.cocoachina.com/industry/20130918/7022.html 必备插件 文档注释生成:https://github.com/onevcat/VVDocumenter-Xcode 自动检索图片名:https://github.com/ksuther/KSImageNamed-Xcode 取色:https://github.com/omz/ColorSense-for-Xcode 插件管理工具 https://github.com/mneorr/Alcatraz curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh 安装完 Xcode 插件管理器后,在 Xcode 的菜单 Window 中多出一个 Package Manager 选项,用于管理 Xcode 插件的安装与卸载。 如果安装了 CocoaPods,在 Xcode 的菜单 Product 中多出一个 CocoaPods 选项,用于管理工程中用到的第三方框架。 移除插件 可以使用上面提到的插件管理工具 Alcatraz。 可以到 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 文件夹中删除。 插件失效修复 http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/

优秀的个人博客,低调大师

iOS - Delegate 代理

1、Delegate 1.1 协议 协议:是多个类共享的一个方法列表。协议中列出的方法没有相应的实现,计划由其他人来实现。协议中列出的方法,有些是可以选择实现,有些是必须实现。 1>、如果你定义了自己的协议,那么不必由自己实现它。但是,这就告诉其他程序员,如果要采用这项协议,则必须实现这些方法。这些方法可以从超类继承。 协议不引用任何类,它是无类的。 分类也可以采用一项协议。 2>、定义一个协议很简单:只要使用 @protocol 指令,后面跟上你给出的协议名称。定义一项协议时,可以扩展现有协议的定义。 @protocol PlayerDelegate <NSObject> - (void)end; @end 3>、协议的修饰 @optional:该指令之后列出的所有方法都是可选的。 @required:该指令之后列出的所有方都是必须实现的,默认。由于 OC 是弱语法,虽然字面上是必须,但编译器并没有强求实现。 4>、协议的声明 @protocol protocol-name 5>、协议的检查 // 检查一个对象是否遵守某项协议。 - (BOOL)conformsToProtocol:(Protocol *)aProtocol; // 用于获取一个协议名称,并产生一个 Protocol 对象,conformsToProtocol: 方法期望这个对象作为它的参数。 @protocol(Drawing) // 检查对象是否能够响应 selector 所指定的方法。 - (BOOL)respondsToSelector:selector // 为名为 alloc 的方法生成一个 SEL 类型的值。 @selector(alloc) 1.2 非正式协议 非正式协议:实际上是一个分类,列出了一组方法但并没有实现它们。非正式协议通常是为根类定义的,有时,非正式协议也称为抽象协议。 声明非正式协议的类自己并不实现这些方法,并且选择实现这些方法的子类需要在它的接口部分重新声明这些方法,同时还要实现这些方法中的一个或多个。 指令 @optional 添加到 OC 2.0 语言中,用于取代非正式协议的使用。 1.3 代理 代理:协议也是一种两个类之间的接口定义。定义了协议的类可以看作是将协议定义的方法代理给了实现它们的类。 代理设计模式的作用: 1、A 对象监听 B 对象的一些行为,A 成为 B 的代理 2、B 对象想告诉 A 对象一些事情,A 成为 B 的代理 代理设计模式的总结: 1、如果你想监听别人的一些行为,那么你就要成为别人的代理 2、如果你想告诉别人一些事情,那么就让别人成为你的代理 代理设计模式的开发步骤: 1、拟一份协议(协议名字的格式:控件名 + Delegate),在协议里面声明一些代理方法(一般代理方法都是 @optional) 2、声明一个代理属性:@property (nonatomic, weak) id delegate; 3、在内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生什么事 4、设置代理:xxx.delegate = yyy; 5、yyy 对象遵守协议,实现代理方法 代理和通知的区别: 代理:1 个对象只能告诉另 1 个对象发生了什么事 通知:1 个对象可以告诉 N 个对象发生了什么事 2、代理传值 2.1 代理反向传值 代理 - 反向传值 1、创建代理协议,并在协议中创建协议方法 2、委托方:发送方,包含协议头文件 3、委托方:发送方,创建代理人属性变量 4、委托方:发送方,调用协议方法,发送传递值 5、代理方:接收方,遵守代理协议 6、代理方:接收方,实例化发送方对象,并设置其代理人为 self 7、代理方:接收方,实现代理协议中的方法,接收传递值 Objective-C PageDelegate1.h #import <Foundation/Foundation.h> @protocol PageDelegate1 <NSObject> // 1、创建代理协议,并在协议中创建协议方法 - (void)setLabelWithText:(NSString *)protocolText; @end Page8.h // 2、委托方:发送方,包含协议头文件 #import "PageDelegate1.h" // 3、委托方:发送方,创建代理人属性变量 @property(nonatomic, weak)id<PageDelegate1> delegate; Page8.m if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) { // 4、委托方:发送方,调用协议方法,发送传递值 [self.delegate setLabelWithText:sendTextFiled.text]; } Page7.m // 5、代理方:接收方,遵守代理协议 @interface Page7 () <PageDelegate1> // 6、代理方:接收方,实例化发送方对象,并设置其代理人为 self Page8 *pvc8 = [[Page8 alloc] init]; pvc8.delegate = self; // 7、代理方:接收方,实现代理协议中的方法,接收传递值 - (void)setLabelWithText:(NSString *)protocolText { receiveLabel.text = protocolText; } Swift PageDelegate1.swift import Foundation protocol PageDelegate1 { // 1、创建代理协议,并在协议中创建协议方法 func setLabelWithText(protocolText:String?) } Page8.swift // 3、委托方:发送方,创建代理人属性变量 var delegate:PageDelegate1! if self.delegate != nil { // 4、委托方:发送方,调用协议方法,发送传递值 self.delegate.setLabelWithText(sendTextFiled.text) } Page7.swift // 5、代理方:接收方,遵守代理协议 class Page7: UIViewController, PageDelegate1 { // 6、代理方:接收方,实例化发送方对象,并设置其代理人为 self let pvc8 = Page8() pvc8.delegate = self // 7、代理方:接收方,实现代理协议中的方法,接收传递值 func setLabelWithText(protocolText: String?) { receiveLabel.text = protocolText } 2.2 代理反向传值封装 代理 - 反向传值,代理封装 1、创建代理协议,并在协议中创建协议方法 2、委托方:发送方,包含协议头文件 3、委托方:发送方,创建代理人属性变量 4、委托方:发送方,声明重构的 init 初始化方法 5、委托方:发送方,重构 init 初始化方法 6、委托方:发送方,调用协议方法,发送传递值 7、代理方:接收方,遵守代理协议 8、代理方:接收方,用重构初始化方法实例化委托方对象,并设置其代理人为 self 9、代理方:接收方,实现代理协议中的方法,接收传递值 Objective-C PageDelegate2.h #import <Foundation/Foundation.h> @protocol PageDelegate2 <NSObject> // 1、创建代理协议,并在协议中创建协议方法 - (void)setLabelWithText:(NSString *)protocolText; @end Page10.h // 2、委托方:发送方,包含协议头文件 #import "PageDelegate2.h" // 3、委托方:发送方,创建代理人属性变量 @property(nonatomic, weak)id<PageDelegate2> delegate; // 4、委托方:发送方,声明重构的 init 初始化方法 - (instancetype)initWithTarget:(id<PageDelegate2>) delegate; Page10.m // 重构的 init 初始化方法 // 5、委托方:发送方,重构 init 初始化方法 - (instancetype)initWithTarget:(id<PageDelegate2>)delegate { if (self = [super init]) { self.delegate = delegate; } return self; } if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) { // 6、委托方:发送方,调用协议方法,发送传递值 [self.delegate setLabelWithText:sendTextFiled.text]; } Page9.m // 7、代理方:接收方,遵守代理协议 @interface Page9 () <PageDelegate2> // 8、代理方:接收方,用重构初始化方法实例化委托方对象,并设置其代理人为 self Page10 *pvc10 = [[Page10 alloc] initWithTarget:self]; // 9、代理方:接收方,实现代理协议中的方法,接收传递值 - (void)setLabelWithText:(NSString *)protocolText { receiveLabel.text = protocolText; } Swift PageDelegate2.swift import Foundation protocol PageDelegate2 { // 1、创建代理协议,并在协议中创建协议方法 func setLabelWithText(protocolText:String?) } Page10.swift // 3、委托方:发送方,创建代理人属性变量 var delegate:PageDelegate2! // 重构的 init 初始化方法 // 5、委托方:发送方,重构 init 初始化方法 init(target delegate:PageDelegate2) { // 在 ViewController 中不能使用 super.init() super.init(nibName: nil, bundle: nil) self.delegate = delegate } if self.delegate != nil { // 6、委托方:发送方,调用协议方法,发送传递值 self.delegate.setLabelWithText(sendTextFiled.text) } Page9.swift // 7、代理方:接收方,遵守代理协议 class Page9: UIViewController, PageDelegate2 { // 8、代理方:接收方,实例化发送方对象,并设置其代理人为 self let pvc10 = Page10(target: self) // 9、代理方:接收方,实现代理协议中的方法,接收传递值 func setLabelWithText(protocolText: String?) { receiveLabel.text = protocolText }

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册