源码阅读笔记
self.lightNavigationBar = [[HTLLightContentStyleNavigationBarUtil alloc] init];
[self.lightNavigationBar configLightContentStyleNavBarWithViewController:self contentView:self.tableView title:@""];
UIViewController *topVC = [UIViewController htl_topViewController];
NVModelBaseHotelOrderCreateOrderBeforeResult 都是在监听这个属性的变化 也就是填单页面的基本信息
image.pngwhiteboard里面存了NVModelBaseHotelOrderCreateOrderBeforeResult的所有信息
image.pngshouldshow表示当前的cell是否显示
setupmodule表示建立这个module的基本信息
这个模块对应
HTLOverseaPrepaySubmitOrderHeaderModule
其中只有一种类型的cell
HTLOverseaPrepaySubmitOrderHeaderCell
这种类型的cell中包含两种类型cell 其中一种是上面的房源信息 HTLOverseaPrepaySubmitOrderBookInfoCell 另外一种是下面的退房警告:HTLOverseaPrepaySubmitOrderCancelInfoCell
这块对应的是HTLOverseaReservationInfoModule(controller)
这里面相对较复杂
房间数对应HTLOverseaRoomsControlCell
入住人对应HTLOverseaConsumerNameCell
联系手机对应HTLOverseaConsumerPhoneCell
电子邮箱对应 HTLOverseaCustomCell
到店时间对应的是HTLArriveTimeModule,其中用的是原声的UItableviewcell arriveTimeCell,但是上面addsubview了一个HTLPurchaseControlCell,不是很理解为什么这么做
image.png这个东西对应的是HTKChooseView 封装好的一个view
image.png对应的HTLOverseaAccomodationPreferenceViewModule,里面用的是原生的UItableviewcell
HTLOverseaAccomodationPreferenceViewController这个对应的是二级页面
image.pngHTLMemberPromotionModule这个模块需要是锦江会员才可以看到的
image.pngHTLPrepayPurchaseDiscountsModule 这个是潘多拉优惠&抵用券模块
image.pngHTLOverseaPrepayInsuranceModule
HTLOverseaPrepayInvoiceModule这个是电子发票信息
translatesAutoresizingMaskIntoConstraints这个属性 在书写复杂的页面布局约束的时候需要设置为NO
一般常用的一个信号操作
image.png image.png初始化的时候做约束设置
image.png设置一个信号 直到这个页面dealloc
从whiteboard中获取数据的代码
image.png image.png拿到一堆信号,然后做相应信号变换处理
HTLHomePageModuleViewController 这个是酒店首页的controller
首页的module都会持有一个viewmodel 那就是HTLHomePageViewModel
Masory更改完约束之后,调用setNeedsUpdateContraints 在下一个runloop到来的时候 更改完约束
HTLOverseaReservationInfoModule这个是房间数的viewmodel
image.png这个是发送消息 与注册消息处理器的代码
注意 messagehandler不能为空 seletor返回值也不能为空
你向西,他就向东,他向左,你就向右。
RACChannelTerminal *channelA = RACChannelTo(self, valueA);
RACChannelTerminal *channelB = RACChannelTo(self, valueB);
[[channelA map:^id(NSString *value) {
if ([value isEqualToString:@"西"]) {
return @"东";
}
return value;
}] subscribe:channelB];
[[channelB map:^id(NSString *value) {
if ([value isEqualToString:@"左"]) {
return @"右";
}
return value;
}] subscribe:channelA];
[[RACObserve(self, valueA) filter:^BOOL(id value) {
return value ? YES : NO;
}] subscribeNext:^(NSString* x) {
NSLog(@"你向%@", x);
}];
[[RACObserve(self, valueB) filter:^BOOL(id value) {
return value ? YES : NO;
}] subscribeNext:^(NSString* x) {
NSLog(@"他向%@", x);
}];
self.valueA = @"西";
self.valueB = @"左";
一段实现RACChannel的代码
image.png