接下来我们进入任务这个菜单选项,直接看页面构成还是算比较简单的,但其实相当复杂,无论从实现上还是说页面逻辑都是很冗大,我们将要分很多篇文章来学习它:
直接的页面实现上是,一个TableView分为两个Section,第一个Section分别两个Cell,下面的Section分为4个不同的Cell,并且根据iOS6的注册UITableViewCell的方法:
[tableView registerClass:[TaskContentCell class] forCellReuseIdentifier:kCellIdentifier_TaskContent];
[tableView registerClass:[LeftImage_LRTextCell class] forCellReuseIdentifier:kCellIdentifier_LeftImage_LRText];
[tableView registerClass:[TaskCommentCell class] forCellReuseIdentifier:kCellIdentifier_TaskComment];
[tableView registerClass:[TaskCommentCell class] forCellReuseIdentifier:kCellIdentifier_TaskComment_Media];
[tableView registerClass:[TaskActivityCell class] forCellReuseIdentifier:kCellIdentifier_TaskActivityCell];
[tableView registerClass:[TaskDescriptionCell class] forCellReuseIdentifier:kCellIdentifier_TaskDescriptionCell];
会更加简洁
这个页面还是挺有意思的,所以打算分的细讲,从上往下开始讲,可以看到,完成的可选状态也是由RAC控制:
@weakify(self);
RAC(self.navigationItem.rightBarButtonItem, enabled) =
[RACSignal combineLatest:@[RACObserve(self, myCopyTask.content),
RACObserve(self, myCopyTask.owner),
RACObserve(self, myCopyTask.priority),
RACObserve(self, myCopyTask.status),
RACObserve(self, myCopyTask.deadline),
RACObserve(self, myCopyTask.task_description.markdown)] reduce:^id (NSString *content, User *owner, NSNumber *priority, NSNumber *status, NSString *deadline){
@strongify(self);
BOOL enabled = ![self.myCopyTask isSameToTask:self.myTask];
if (self.myCopyTask.handleType > TaskHandleTypeEdit) {
enabled = ([self.myCopyTask.content trimWhitespace].length > 0 &&
self.myCopyTask.project != nil &&
self.myCopyTask.owner != nil);
}
return @(enabled);
}];
看到这段代码,RAC信号道将self.navigationItem.rightBarButtonItem对象和它的属性绑定后,然后绑定self的数据Model对象myCopyTask,并且根据其逻辑是否返回Bool类型
先试着点击“执行者”,可以看到提示,特别喜欢CodingNet的写法,放在Category里面:
+ (void)showHudTipStr:(NSString *)tipStr{
if (tipStr && tipStr.length > 0) {
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:kKeyWindow animated:YES];
hud.mode = MBProgressHUDModeText;
hud.detailsLabelFont = [UIFont boldSystemFontOfSize:15.0];
hud.detailsLabelText = tipStr;
hud.margin = 10.f;
hud.removeFromSuperViewOnHide = YES;
[hud hide:YES afterDelay:1.0];
}
}
[NSObject showHudTipStr:@"需要选定所属项目先~"];
然后我们点击最后一行:
可以看到一个类似UIActionSheet的选择器效果,这个是直接用了控件:ActionSheetDatePicker
这个使用上很简单,就不多说了
下篇回头来讲 “添加标签” 这个所在的Cell的实现,非常复杂哦,也非常期待!