**代码如下** 怎么提取最外层新创建的对象 UIView *addCard = ({ UIButton *addCard = UIButton.new; [footer addSubview:addCard]; self.addProject = addCard; [addCard makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(0); make.top.equalTo(0); make.right.equalTo(0); make.bottom.equalTo(0); }]; [addCard setTitle:@"添加任务" forState:UIControlStateNormal]; [addCard setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // [addCard addTarget:self action:@selector(addCard:) forControlEvents:UIControlEventTouchUpInside]; //使用ReactiveCocoa处理点击事件,相当于上面的addTarget:方法 //addCard点击事件 [[addCard rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { //隐藏addCard addCard.alpha = 0; //输入框 UITextView *textView = ({ self.viewText = [UITextView new]; [footer addSubview:self.viewText]; [self.viewText makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(10); // make.top.equalTo(3); make.right.equalTo(-10); make.bottom.equalTo(-44+2); }]; //因为footer变大,所以改变tableView的contentInset listTableView.contentInset = UIEdgeInsetsMake(46, 0, 88, 0); //立即刷新视图 [self layoutIfNeeded]; _viewText; }); self.textView = textView; //初始化add按钮 UIButton *add = ({ UIButton *view = [UIButton new]; view.contentHorizontalAlignment=UIControlContentHorizontalAlignmentRight; [view setTitle:NSLocalizedString(@"add", nil) forState:UIControlStateNormal]; [view setTitleColor:Global_trelloBlue forState:UIControlStateNormal]; view.titleLabel.font = [UIFont systemFontOfSize:15]; [footer addSubview:view]; [view makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(-20); make.bottom.equalTo(-1); make.width.equalTo(100); }]; [view sizeToFit]; //初始化后隐藏(为了动画效果) view.alpha = 0; //立即刷新 [self layoutIfNeeded]; //add点击事件,创建新的tast [[view rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { //textView判空 if (![textView.text isEqualToString:@""]) { AddTaskApi *api = AddTaskApi.new; //如果在没有task的列添加新的task,t_sort传0 api.t_sort = @(0); //都上传0 // if (listTableView.model.tasks.count == 0) { // api.t_sort = @(0); // } // else { //否则传当前列最后一个task的t_sort,再加0.1 // TaskModel *model = listTableView.model.tasks[listTableView.model.tasks.count-1]; // api.t_sort = @(model.t_sort.doubleValue+0.1); // } api.t_taskContent = textView.text; api.t_projectId = @(_project_id.integerValue); //当前列的id api.t_panel_id = @(listTableView.model.id.integerValue); //发起请求 [api startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) { NewTasklistModel *model = request.responseModel; //存在即失败(接口定义,只在失败时才返回status值) if (model.status) { } else { //添加成功 textView.text = nil; //更新数据源 [listTableView.model.task addObject:model]; //插入行 [listTableView insertRow:(listTableView.model.task.count-1)inSection:0 withRowAnimation: UITableViewRowAnimationBottom]; //计算rowHeight CGFloat rowHeight = [self tableView:listTableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:listTableView.model.task.count-1 inSection:0]]; //根据当前列高度和rowHeight决定列高度是否增加 //updateConstraints:方法更新autolayout [listView updateConstraints:^(MASConstraintMaker *make) { //增加新的rowHeight后list超出允许最大高度,之前不满最大高度 if (listTableView.cellTotalHeight > (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44) && (listTableView.cellTotalHeight-rowHeight) < (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) { make.height.equalTo(listView.yyHeight+((kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)-(listTableView.cellTotalHeight-rowHeight))); } //增加新的rowHeight后list没有超过允许最大高度 if (listTableView.cellTotalHeight <= (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) { make.height.equalTo(listView.yyHeight+rowHeight); } }]; //autolayout动画 [UIView animateWithDuration:0.25 animations:^{ [self layoutIfNeeded]; }]; //tableView滚动到最底部,显示新添加行 [listTableView scrollToRow:listTableView.model.task.count-1 inSection:0 atScrollPosition:UITableViewScrollPositionBottom animated:NO]; //改变原列的标题数量 UITextField *sourceListTableHeaderTF=(UITextField *)[self viewWithTag:[listTableView.model.id integerValue]]; sourceListTableHeaderTF.text=[NSString stringWithFormat:@"%@ %ld",listTableView.model.name,(unsigned long)listTableView.model.task.count]; } } failure:^(YTKBaseRequest *request) { }]; } }]; view; }); self.addBtn = add; //初始化cancel按钮 UIView *cancel = ({ UIButton *viewCancel = [UIButton new]; viewCancel.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft; [viewCancel setTitle:NSLocalizedString(@"cancel", nil) forState:UIControlStateNormal]; [viewCancel setTitleColor:Global_trelloBlue forState:UIControlStateNormal]; viewCancel.titleLabel.font = [UIFont systemFontOfSize:15]; [footer addSubview:viewCancel]; [viewCancel makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(20); make.bottom.equalTo(-1); make.width.equalTo(100); }]; [viewCancel sizeToFit]; viewCancel.alpha = 0; [self layoutIfNeeded]; //cancel点击事件 @weakify(self, viewCancel, textView, footer, listView, add, addCard) [[viewCancel rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { @strongify(self, viewCancel, textView, footer, listView, add, addCard) //footer高度还原 [footer updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(44); }]; //list减去footer增加的高度(在这里做是为了动效) [listView updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(listView.yyHeight-44); }]; //tableView的contentInset还原 listTableView.contentInset = UIEdgeInsetsMake(46, 0, 44, 0); //隐藏textView textView.alpha = 0; [UIView animateWithDuration:0.25 animations:^{ //cancel隐藏 viewCancel.alpha = 0; //add隐藏 add.alpha = 0; //addCard显示 addCard.alpha = 1; [self.viewController.navigationController setNavigationBarHidden:NO animated:YES]; [self layoutIfNeeded]; }]; [textView resignFirstResponder]; }]; viewCancel; }); self.viewCancel = cancel; //addCard点击后动效 [footer updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(44+44); }]; [textView updateConstraints:^(MASConstraintMaker *make) { make.top.equalTo(2); }]; [listView updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(listView.yyHeight+44); }]; [UIView animateWithDuration:0.25 animations:^{ [self.viewController.navigationController setNavigationBarHidden:YES animated:YES]; add.alpha = 1; cancel.alpha = 1; [self layoutIfNeeded]; }]; //弹出键盘 [textView becomeFirstResponder]; }]; addCard; });
用一个全局的弱引用属性,不就全局可见了, 跟以什么方式创建的对象没啥关系。