項(xiàng)目中需求
:
每摁換行鍵一次添加一個(gè)標(biāo)簽
然后自己剛好在網(wǎng)上找到了一個(gè)別人寫好的類
:TLTagsControl
問(wèn)題出現(xiàn)了:怎么取出標(biāo)簽數(shù)組?托享?
自己覺(jué)得最簡(jiǎn)單的方法就是在它的基礎(chǔ)上添加一個(gè)block屬性來(lái)傳值骚烧,結(jié)果真的傳值成功啦
現(xiàn)在分享下自己使用block屬性傳值的感慨,真的是越用越覺(jué)得block神奇好用闰围,但是自己有很多關(guān)于block的知識(shí)并不是很能說(shuō)出一二三赃绊,只知道怎么使用,以后了解更多再補(bǔ)充O哿瘛1滩椤!
-
首先在TLTagsControl.h中聲明block屬性
/** * 用來(lái)監(jiān)聽(tīng)最終的標(biāo)簽數(shù)組 */ @property (nonatomic, copy) void (^finalTags)(NSArray *array);
-
在TLTagsControl.m的reloadTagSubviews方法最后面執(zhí)行block監(jiān)聽(tīng)
NSArray * finalTagArray = (NSArray *)_tags; if (self.finalTags) { self.finalTags(finalTagArray); }
-
在自己建的DZY_EditMarkViewController.m中初始化繼承TLTagsControl的_defaultEditingTagControl后監(jiān)聽(tīng)block并接受tag標(biāo)簽數(shù)組
@property (nonatomic,strong) TLTagsControl * defaultEditingTagControl; //聲明一個(gè)屬性 NSMutableArray * tags = [NSMutableArray array]; _defaultEditingTagControl.tags = [tags mutableCopy]; _defaultEditingTagControl.tagPlaceholder = @"343443";//不知道為什么不起作用校仑,有時(shí)間研究 if (self.fromPublicStatusVCTags.count > 0) { _defaultEditingTagControl = [[TLTagsControl alloc]initWithFrame:CGRectMake(5, 5, DZY_SCREENWIDTH-10, 36) andTags:_fromPublicStatusVCTags withTagsControlMode:TLTagsControlModeEdit]; }else{ _defaultEditingTagControl = [[TLTagsControl alloc]initWithFrame:CGRectMake(5, 5, DZY_SCREENWIDTH-10, 36) andTags:_allTags withTagsControlMode:TLTagsControlModeEdit]; } _defaultEditingTagControl.showsHorizontalScrollIndicator = NO;//不顯示滾動(dòng)條 [_defaultEditingTagControl reloadTagSubviews]; self.allTags = _defaultEditingTagControl.tags; [_defaultEditingTagControl setTapDelegate:self]; [self.view addSubview:[self defaultEditingTagControl]]; __weak typeof(self) vc = self; _defaultEditingTagControl.finalTags = ^(NSArray *array){ vc.allTags = (NSMutableArray *)array; };
到此就可以在DZY_EditMarkViewController.m中使用標(biāo)簽數(shù)組啦C捶颉!肤视!
使用總結(jié):
block屬性傳值時(shí)档痪,誰(shuí)傳值,誰(shuí)聲明block屬性邢滑,然后在.m文件中設(shè)置block屬性要傳的值腐螟,最后在要接收值的地方愿汰,調(diào)用“誰(shuí)”的block屬性,就可以把值傳過(guò)去啦
2015-9-7 第一次分享關(guān)于block的使用
Block使用經(jīng)驗(yàn)(二)
項(xiàng)目需求:
(消息列表界面)MessageViewController
跳轉(zhuǎn)到(聊天界面)DZY_ChatViewController
乐纸,返回MessageViewController
列表時(shí)消息未讀的提示
消失衬廷,界面類似QQ消息界面
附效果圖
首先
在
DZY_ChatViewController.h
中聲明
haveReadPersonLetterPleaseRefresh
的block
@property(nonatomic,copy)void(^haveReadPersonLetterPleaseRefresh)(BOOL success);
在兩個(gè)界面有關(guān)聯(lián)的地方實(shí)現(xiàn)haveReadPersonLetterPleaseRefresh這個(gè)block屬性方法
[1]---在
DZY_ChatViewController.m
中的加載數(shù)據(jù)方法成功后去調(diào)用
-(void)loadListDataFromActive{
[RequestNetWork getWithURL:url params:nil isHtml:NO success:^(id json) {
//進(jìn)入私信詳情界面后,通知列表界面刷新(因?yàn)槿∠崾臼窃谠摻缑嬉贿M(jìn)入就置0)
//請(qǐng)求成功再刷新
if (self.haveReadPersonLetterPleaseRefresh) {
self.haveReadPersonLetterPleaseRefresh(YES);
}
} failure:^(NSError *error) {
NSLog(@"----歷史消息-----%@",error);
}];
}
附:
自己剛開(kāi)始覺(jué)得一進(jìn)入DZY_ChatViewController就可以block調(diào)用汽绢,結(jié)果有時(shí)候可以實(shí)現(xiàn)吗跋,有時(shí)候又不能實(shí)現(xiàn),可每次打斷點(diǎn)都可以實(shí)現(xiàn)宁昭,同事提醒下跌宛,恍然大悟,網(wǎng)絡(luò)請(qǐng)求成功才去調(diào)用最符合實(shí)際积仗,所以最終代碼如上
[2]---在
MessageViewController.m
中要跳轉(zhuǎn)的地方調(diào)用block疆拘,實(shí)現(xiàn)關(guān)聯(lián)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//取消選中狀態(tài)
[tableView deselectRowAtIndexPath:indexPath animated:YES];
DZY_ChatViewController *chatView=[[DZY_ChatViewController alloc]init];
chatView.nickName=personLetterNew.authorNickname;
//私信消息已讀會(huì)通知刷新
__weak typeof(self) vc = self;
chatView.haveReadPersonLetterPleaseRefresh = ^(BOOL success){
NSLog(@"私信消息已讀會(huì)通知刷新");
if (success == YES) {
[vc.tableView headerBeginRefreshing];
}
[self.navigationController pushViewController:chatView animated:YES];
}
至此,block實(shí)現(xiàn)界面通信就結(jié)束啦寂曹,還是之前說(shuō)的哎迄,block屬性的傳值,通信隆圆,都只需要三步(1-聲明漱挚,2-聲明block的.m文件中實(shí)現(xiàn)block,3-與之有關(guān)的.m文件也實(shí)現(xiàn)block)
2015-09-14晚渺氧,第二次分享關(guān)于block的使用