【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row

这篇文章是我的【iOS开发每日小笔记】系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧。它们可能会给用户体验、代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下。90%的作用是帮助自己回顾、记忆、复习。

 

今天在项目中遇到这样一个小问题:我使用UIPickerView,获取用户选择的时间,时间分为小时和分钟两栏,而且要求不能选0小时0分钟(也就是最小值是0小时1分钟)。

一开始我的做法是,当用户选择好时间后,点击一个“下一步”按钮,此时判断用户选择的时间,如果是0小时0分钟,则给出提示,“请重新设置时间”。这是一种比较常规的做法。但当我的项目PL看到后,对我说,是否能优化一下,做成用户选择0小时0分钟时,自动的将picker上0分钟改为选择1分钟?我说:“把你要抄的APP拿来给我看吧”,PL掏出手机,我看到了他所说的效果。(其实后半段是个段子啦O(∩_∩)O哈哈哈~)。

效果图:

解释一下:假设左边为小时,可选的为0小时和1小时,右边为分钟,可选0到59分钟。用户只能选0小时1分钟到1小时59分钟里的每一个可选搭配。那么,现在如果用户选择了0小时0分钟,那么0分钟将自动跳转为1分钟。如果用户选的是1小时0分钟,此时再将1小时改为0小时,那么0分钟也将自动转为1分钟,总之就是不让你选0小时0分钟。这样做的好处是,省去了用户点击“请重新设置时间”的AlertView警告框。是一种人性化的用户体验的提升!(不得不说PL的事业就是高我一筹啊,呵呵。。。)

好了现在说实现,我为此做了个简单的Demo,放在了这里(https://github.com/pigpigdaddy/PickerAdvanceDemo)请看官斧正!

其实还真是很简单

关键的代码几行:

 1 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
 2 {
 3     if (component == 0) {
 4         self.hour = row;
 5     }else{
 6         self.minute = row;
 7     }
 8     if ((self.hour == 0 && component == 1 && row == 0) || (self.minute == 0 && component == 0 && row == 0)) {
 9         [pickerView selectRow:1 inComponent:1 animated:YES];
10     }
11     
12 }

其中两个属性@property:

1 @property (nonatomic, assign) NSInteger hour;
2 @property (nonatomic, assign) NSInteger minute;

用来记录选中的小时和分钟。

这个逻辑真的很简单,不用我一行行解释了。

其实本文就一个观点:有时候,站在用户的角度想想,是否我们的人机交互体验可以更好?利用iOS提供的接口,简单的方法可能会给用户带来很多小小的优化体验!

posted @ 2014-08-07 23:00  pigpigdaddy  阅读(1811)  评论(0编辑  收藏  举报