1.在一些按钮的点击事件中,如果由于网络的延迟、线程的阻塞等问题,导致了在实际应用中 用户在短时间内点击多次会出现调用按钮的触发事件时,我们可以通过下面这样的方法来解决
//1.当用户点击后,在进来触发事件后直接将button设置为不可点击
senderBtn.userInteractionEnabled = NO;
//设置一个block,让其延迟一定时间,再回到主线程执行
int64_t delayInSeconds = 1.0;//1秒后执行
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//1秒后再让其恢复点击事件
sender.userInteractionEnabled = YES;
});
2.在需要从服务器获取由一些消息的时间时,由于服务器通常存放的是时间戳,因此获取之后我们是需要将其修改的,可以通过调用下面的方法返回一个字符串的时间
- (NSString *)returnTimeByTimeStamp:(NSString *)timeStamp
{
NSTimeInterval time=[timeStamp doubleValue];
NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式
//:@"yyyy-MM-dd HH:mm:ss" 年-月-日 时-分-秒,其中HH为24小时制
[dateFormatter setDateFormat:@"HH:mm"];
NSString *currentDateStr = [dateFormatter stringFromDate: detaildate];
return currentDateStr;
}
3.对于一些由storyBoard创建的控制器,在外部使用时暂时只能通过UIStoryboard的方法来创建。但是有时我们需要直接创建出一个筛选过数据的控制器,这时可以在内部创建一个实例,然后经过传入的参数经过设置后再返回
//storyboard创建的viewController的.m文件中
- (instancetype)initWithOrderlType:(NSString *)typeName AndTitle:(NSString *)title{
//先创建一个实例
TradeViewController *vc= [[UIStoryboard storyboardWithName:@"Trade" bundle:nil] instantiateViewControllerWithIdentifier:@"TradeViewController"];
//对创建出来的控制器进行修改
//例如设置请求的参数,重新发送一个请求来改变当前的参数
_requestModel = [[TradeListRequestModel alloc] init];
_requestModel.type = typeName;
[vc requsetDataWithRequest:_requestModel];
//设置标题、取消顶部一些不要的控件等
vc.tableView.tableHeaderView = nil;
vc.title = title;
//最后返回
return vc;
}