问题描述
创建视图的方法,但是很诡异,看不懂是什么意思,求大神指教
代码如下:
UIView *cancel = ({UIButton *view= [UIButton new]; view.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft; [view setTitle:NSLocalizedString(@'cancel', nil) forState:UIControlStateNormal]; [view setTitleColor:Global_trelloBlue forState:UIControlStateNormal]; view.titleLabel.font = [UIFont systemFontOfSize:15]; [createListView addSubview:view]; view.tag = 999; [view makeConstraints:^(MASConstraintMaker *make) {make.left.equalTo(20);make.bottom.equalTo(-1);make.width.equalTo(100); }]; [view sizeToFit]; view.alpha = 0; [self layoutIfNeeded]; //cancel点击事件 @weakify(self, view, textView, createListView, listView, add, addCard) [[view rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {@strongify(self, view, textView, createListView, listView, add, addCard)//footer高度还原[createListView updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(44);}];//list减去footer增加的高度(在这里做是为了动效)[listView updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(listView.yyHeight-44);}]; //隐藏textViewtextView.alpha = 0;[UIView animateWithDuration:0.25 animations:^{ //cancel隐藏 view.alpha = 0; //add隐藏 add.alpha = 0; //addCard显示 addCard.alpha = 1; [self.viewController.navigationController setNavigationBarHidden:NO animated:YES]; [self layoutIfNeeded];}];[textView resignFirstResponder]; }]; view;});
问题解答
回答1:诡异吗? 这是我复制的...addSubview的参数放在一个'({})'代码块中,而view的创建及属性设置都放在'({})'完成,代码块最后一句即我们要添加的子view。
这种写法沿用了GNU C的一个特性,即复合语句(compound statement)。即在'({})'代码块中,我们可以放置多个语句,这些语句可以是循环、分支、变量声明、函数调用等。而复合语句的最后一句是一个表达式,其作为整个复合语句的最终值。
在写Objective-C代码时,使用复合语句能让我们的代码变得更优雅,特别是创建并添加一堆子view时,能让我们的代码看上去更整洁。建议经常使用。网页