最近一直在忙項目,遇到了個下拉刷新的問題想提出個疑問,還請知情的同學不吝賜教。順便再放出這段時間忙項目時候的倆小demo。
Demo No.1
要實現(xiàn)的下拉刷新效果是這樣的:

我的思路是這樣的。使用MJ大大的框架自定義一個Header然后根據(jù)MJRefreshState的各種狀態(tài)進行header界面的調(diào)整??墒菍懲曛蟀l(fā)現(xiàn)當header比較高的時候MJRefreshStatePulling這個手指松開就可以進行刷新的狀態(tài)監(jiān)測不到。目前只實現(xiàn)了這樣的效果


Demo已放在Github,希望知道的同學,給解惑一下。在下感激不盡!謝謝。
Demo No.2
由于公司項目是電商,收獲地址這塊就用的是三級城市列表。因此就從項目中摘了出來,簡單寫了一下,效果如圖:

寫的過程中,比較坑的是添加收貨地址時候后臺告訴我要傳省、市、區(qū)(縣)對應的ID,并且收獲地址列表返回數(shù)據(jù)是對應的ID。頓時都無語了,強烈要求他在列表里直接返回對應的省市區(qū)(縣)名字了。不然三個大數(shù)組,返回的上千條數(shù)據(jù),列表和詳情都轉(zhuǎn)模型,再遍歷,這要遍歷到啥時候了。。。
關鍵點是顯示到界面時候的邏輯判斷,也就是取數(shù)據(jù)的這一塊。。。
#pragma mark - 點擊確定按鈕事件
/**
點擊確定按鈕事件
@param sender sender
*/
- (void)completionButtonAction:(UIButton *)sender
{
NSString *provinceName = @"";
NSString *cityName = @"";
NSString *regtionName = @"";
NSInteger _provinceID = 0;
NSInteger _cityID = 0;
NSInteger _regtionID = 0;
HPAddAddressPickerModel *pickerModel;
HPAddAddressCityModel *cityModel;
HPAddAddressRegionModel *regtionModel;
if (_provinceArray.count > 0) {
if (_firstCurrentIndex > 0) {
if (_firstCurrentIndex - 1 < _provinceArray.count) {
pickerModel = _provinceArray[_firstCurrentIndex - 1];
//獲取省
provinceName = pickerModel.name;
_provinceID = pickerModel.provinceID;
}
}
}
if (_cityArray.count > 0) {
if (_secondCurrentIndex > 0) {
if (_secondCurrentIndex - 1 < _cityArray.count) {
cityModel = _cityArray[_secondCurrentIndex - 1];
//獲取市
cityName = cityModel.name;
if (cityModel.parent_id == pickerModel.provinceID) {
_cityID = cityModel.city_id;
}
}
}
}
if (_regionArray.count > 0) {
if (_thirdCurrentIndex > 0) {
if (_thirdCurrentIndex - 1 < _regionArray.count) {
//獲取區(qū)
regtionModel = _regionArray[_thirdCurrentIndex - 1];
regtionName = regtionModel.name;
if (regtionModel.parent_id == cityModel.city_id) {
_regtionID = regtionModel.region_id;
}
}
}
}
NSLog(@"省%ld 市%ld 區(qū)%ld",_provinceID,_cityID,_regtionID);
if (_provinceID == 0) {
// [STTextHudTool showText:@"請選擇正確的省份" withSecond:1];
return;
}else if (_cityID == 0) {
// [STTextHudTool showText:@"請選擇正確的城市" withSecond:1];
return;
}else if (_regtionID == 0){
// [STTextHudTool showText:@"請選擇正確的區(qū)(縣)" withSecond:1];
return;
}
NSDictionary *params = @{
@"province": @{
@"provinceName":provinceName,
@"provinceID":kStringIntegerFormat(_provinceID)
},
@"city": @{
@"cityName":cityName,
@"cityID":kStringIntegerFormat(_cityID)
},
@"regition":@{
@"regtionName":regtionName,
@"regitionID":kStringIntegerFormat(_regtionID)
},
};
if (_completion) {
_completion(params);
}
}
Demo No.3
公司項目首頁搶購商品cell上需要根據(jù)后臺返回的結(jié)束時間加一個倒計時?,F(xiàn)在也把這塊給抽出來了,效果如圖:

實現(xiàn)思路就是先寫了個NSString+Extension的分類,然后把后臺返回的結(jié)束時間轉(zhuǎn)化為倒計時一共的時間。然后用GCD寫個一秒鐘的倒計時。每1秒鐘給cell上的UILable賦值一次。雖然性能不會很好,但是能力有限,想不到更好的方式了。有其他寫法的童鞋,也請多多指教~
關鍵代碼在這里:
- (void)viewDidLoad {
[super viewDidLoad];
WS(weakSelf);
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuseIdentifier"];
[self.homePageViewModel countDownWithPER_SECBlock:^{
[weakSelf updateTimeInVisibleCells];
}];
}
#pragma mark - Custom Method
- (void)updateTimeInVisibleCells
{
//遍歷當前 屏幕可見cell,對cell上的倒計時一秒鐘賦值一次
[self.tableView.visibleCells enumerateObjectsUsingBlock:^(__kindof UITableViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ( [obj isKindOfClass:[UITableViewCell class]]) {
// [NSString stringToCurtDownString:string] 這個是分類方法
obj.textLabel.text = [NSString stringToCurtDownString:self.homePageViewModel.rushArray[obj.tag]];
}
}];
}