本文演示了工具栏UIToolbar和日期选择器UIDatePicker的应用,范例App运行界面如下所示:
工具栏UIToolbar – 一般显示在底部,用于提供一组选项,让用户执行一些功能,而并非用于在完全不同的UI界面之间切换;在不同 UI 界面切换,是选项卡 Tab Bar负责的。
日期选择器UIDatePicker - 一般将其Value Changed 事件连接到一个操作方法,读取其返回值,其返回一个NSDate 对象。可以在Attributes Inspector窗口对UIDatePicker进行定制:
范例App的主要代码,如下所示:
下面2个方法在UIDatePicker视图控制器中。
- (IBAction)dismissDateChooser:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
上面这个方法负责关闭模态场景,也就是日期选择器窗口。
- (IBAction)setDateTime:(id)sender {
[(MainViewController *)self.mainViewController calculateDateDifference:((UIDatePicker *)sender).date];
}
setDateTime 方法则是和UIDatePicker对象的value changed 事件关联,在用户选择日期时,调用calcuateDateDifference: 方法,计算2个时间之间的差异(单位:秒)。
下面的这2个方法,在MainViewController 视图控制器实现文件中。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
((DateChooserViewController *)segue.destinationViewController).mainViewController = self;
}
方法prepareForSegue:sender 负责在视图切换时,设置destinationViewController的mainViewController 属性为self,随后在destinationViewController实例中会访问该属性。
- (void) calculateDateDifference:(NSDate *)chosenDate
{
NSDate *todayDate;
NSString *differenceOutput;
NSString *todayDateString;
NSString *chosenDateString;
NSDateFormatter *dateFormat;
NSTimeInterval difference;
todayDate = [NSDate date];
difference = [todayDate timeIntervalSinceDate:chosenDate];
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
todayDateString = [dateFormat stringFromDate:todayDate];
chosenDateString = [dateFormat stringFromDate:chosenDate];
differenceOutput = [[NSString alloc] initWithFormat:
@”当前时间:%@ \n约会时间:%@\n还需等待:%1.2f 小时”,
todayDateString, chosenDateString, fabs(difference)/3600];
self.outputLabel.text = differenceOutput;
}
自定义的calculateDateDifference方法,负责实现日期计算逻辑和显示。其中使用到了NSDate 对象的timeIntervalSinceDate方法,计算2个NSDate对象之间相差多少秒;另外,创建了一个NSDateFormatter 日期格式化对象,可以调用stringFromDate方法,将NSDate对象转换为指定格式的NSString 对象。
最后,将结果按照指定的格式输出,%@和%1.2f — 分别表示字符串和一个带前导零和2位小数的浮点数。