【UIPickerView案例04-随机点餐完善 Objective-C语言】

一、之前我们讲到哪里

通知

1)首先,是搭建界面

2)然后呢,是加载数据

通知

先把这个数据文件,拖进来,然后呢,设置它的代理对象、数据源对象

然后呢,在控制器里面,遵守对应的协议,

通知

实现对应的方法

跟TableView的思路,一样一样的,

也是,把多少行返回

通知

把多少组,返回

然后呢,每组多少行

然后呢,每一行显示什么内容

通知

3)然后呢,是不是随机点餐,接下来,就是随机点餐吧

通知

先呢,给它拖一根线

通知

拖一个事件,在这个事件里面呢,遍历所有的数据,遍历多少组

i呢,就是对应的,第一组、第二组、第三组

然后呢,把这一组的数据,让它去随机选中

1.接下来呢,是将数据显示到Label上,

通知

在这个Main.storyboard里面,这个Label的约束,距离左边这个,

通知

这里的话,有一个快捷键,叫做:按住Control键,然后呢,拖过来

通知
通知

这个Horizontal Spacing

就是与水平之间的间距

还有一个Vertical Spacing,就在我们下面

通知

按住Control键,拖过去,设置一个水平间距

但是,这个水平间距的话,你能知道是多少吗,

不知道吧

如果你把这个Label呢,放到这里,

通知

这时候,按住Control键,拖过来

通知

那你再添加一个水平间距,这时候呢,你的Label的间距,就是这么远了

通知

这个水平间距的话,你放哪儿,它就是哪儿,

如果你这个Label左边的间距,必须让它为20,这个时候,你就不能这么去拖了,你选中这个Label,添加一下约束

通知

把这个勾去掉,它距离左边的约束,

通知

距离左边“水果”这个Label,固定一下它的约束,是多少,

就可以确定,它是多少

2.“随机点餐”按钮

这个拖线,

我按住Control键,把它拖到类扩展里面了,

通知

我们也可以,按住Control键,拖到下面

通知

就可以拖出一个事件

通知

拖到下面,以后,看上面,Connection,直接是一个Action

也就是说,你拖到下面,这个类实现里面呢,直接就可以生成一个方法

但是呢,如果你按住Control键,拖到上面的时候,

通知

这个时候,上面这个Connection,你是不是就可以选了

可选的:Outlet、Action

通知

我们常用的呢,就是这两个

Outlet是什么,对应的属性,

Action是什么,对应的方法

而且,你如果拖到声明里面,在声明和实现里面,会有这两个方法,同时存在

如果你拖到实现呢,就只有一个了

3.让这个Label显示PickerView的内容

通知

我们现在已经实现了,让这个PickerView,随机选中了

但是呢,它的数据,有没有显示出来

command + R,我们再看一下啊

通知

点击:随机点餐

奇异果、肉夹馍、茶饮料

榴莲、水煮肉片、果蔬汁

不一致吧

是不是没有选中

虽然你这个PickerView,是选中数据了

但是呢,你没有把这个文字,给我显示到Label上

所以呢,这可以怎么办,是不是也可以手动调用一下这个选中事件,让它去选一下

通知

然后,它的行呢

通知

就是这个随机的行

然后呢,它的列呢,就是这个i,

通知

大家说,怎么写,

通知

调用它的didSelect方法

通知

然后呢,把这个pickerView,给它传进来

通知

然后呢,选中的行,是什么,就是随机的行

通知

然后呢,列呢,就是i

通知

然后呢

通知

command + R

通知

是不是有了

二、还有一个小问题,我们看一下示例程序

通知

1.是不是,每次点击“随机点餐”这个按钮,每一次你这个数据都在变,没有重复的吧

我们现在写的这个程序,点击“随机点餐”,

通知

什么情况,梅菜扣肉,变了吗

有时候,它会有一个数据,或者两个数据,不变

所以说,现在我们就要把这个优化一下

每次点击“随机点餐”,这三样,都给我变一下

回到控制器里面,先给大家说一下

pickerView里面,有一个方法

通知

selectedRowInComponent:(NSInteger)

通知

这个是什么意思呢,就是获取你在当前组中选中的那一行啊,

我这儿直接写i

通知

什么意思啊,就是说,你在i组,选中的行啊,

然后呢,之所以会没有变化,是不是因为,它的随机数,跟我们当前选中的行,是一样的,所以呢,它就不滚动了,是不是

那怎么办,你是不是就要判断一下,你当前选中的行,跟这个随机数,一样不一样

如果一样,是不是重新生成啊

如果不一样呢,是不是就可以用了

我们是不是直接就可以根据它,去获取了,

通知

//获取第i组当前选中的行

[self.pickerView selectedRowInComponent:I];

通知

选中的行,是什么呢,我们看一下它的返回值类型

按一下Esc键,

通知

是不是有了,NSInteger,

用NSInteger接一下

NSInteger selRowNum = [self.pickerView selectedRowInComponent:I];

通知

然后呢,我要判断,当前,选中的行,跟这个随机数,一样不一样,

而且呢,一样的话,是不是又要重复生成,

然后呢,我是要判断,用什么判断,

while(condition){

statements

}

直接用一个while循环,如果你这两个数,是相等的,你就直接继续生成,

通知

是不是直接可以在这里边写了,

//如果随机数,与当前选中的行号一致,需要重新生成随机数

while(selRowNum == ranNum){

ranNum = arc4random_uniform((int)count);

通知
通知

while循环:

如果这个条件,满足,它是不是一直去给你随机生成,

如果条件不满足呢,

是不是就往下执行了

所以,你这个随机数,是不是就可以保证它,每一次生成的随机数,都跟当前选中的行号,不一致,

这样的话,你就可以让它一直在改变,

command + R

通知

这就是我们这个随机点餐系统:

通知

1)遍历所有的组

2)根据每一组里面食物的数量,确定随机数的范围

3)然后呢,去生成随机数,

4)但是呢,直接去用这个随机数,还不太好,有时候呢,可能你生成这个随机数,跟它选中的那个行号,比如说,显示的是5行,然后呢,你生成的随机数,又是5,

是不是就没变啊

所以呢,我们需要通过这个while循环,确定你这个行号,跟我当前选中的这个行号,不一致,

再去执行其他的操作

好,这就是我们这里说的这么一个东西

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值