创建视图的方法,但是很诡异,看不懂是什么意思,求大神指教
代码如下:
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);
}];
//隐藏textView
textView.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;
});
诡异吗? 这是我复制的...
addSubview的参数放在一个"({})"代码块中,而view的创建及属性设置都放在"({})"完成,代码块最后一句即我们要添加的子view。
这种写法沿用了GNU C的一个特性,即复合语句(compound statement)。即在"({})"代码块中,我们可以放置多个语句,这些语句可以是循环、分支、变量声明、函数调用等。而复合语句的最后一句是一个表达式,其作为整个复合语句的最终值。
在写Objective-C代码时,使用复合语句能让我们的代码变得更优雅,特别是创建并添加一堆子view时,能让我们的代码看上去更整洁。建议经常使用。
网页