2.12 步进控制器——UIStepper

步进控制器从名字上大致就可以了解其功能,是进行离散式数据调节的常用视图控件。

2.12.1 步进控制器的基本属性使用

使用Xcode开发工具创建一个名为UIStepperTest的工程,在ViewController类的viewDodLoad方法中添加如下代码。

Swift语言版本:

            override func viewDidLoad() {
                super.viewDidLoad()
                let stepper = UIStepper()
                stepper.center = CGPoint(x: 100, y: 100)
                stepper.isContinuous = true
                stepper.autorepeat = true
                stepper.wraps = true
                stepper.minimumValue = 1
                stepper.maximumValue = 10
                stepper.stepValue = 1
                stepper.tintColor = UIColor.red
                self.view.addSubview(stepper)
                stepper.addTarget(self, action: #selector(click), for: .valueChanged)
            }

Objective-C语言版本:

        - (void)viewDidLoad {
            [super viewDidLoad];
            UIStepper * stepper = [[UIStepper alloc]init];
            stepper.center = CGPointMake(100, 100);
            stepper.continuous = YES;
            stepper.autorepeat = YES;
            stepper.wraps = YES;
            stepper.minimumValue = 1;
            stepper.maximumValue =10;
            stepper.stepValue = 1;
            stepper.tintColor = [UIColor redColor];
            [self.view addSubview:stepper];
            [stepper addTarget:self action:@selector(click:) forControlEvents:UIControlEventValueChanged];
        }

UIKit框架中所有的视图控件都有center这个属性,center属性用于设置控件的中心位置坐标,上面的代码将步进控制器设置在坐标为(100,100)的位置。continuous属性设置触发方法是否连续执行,当用户按住步进控制器上的某个按钮不松开时,如果continuous属性设置为布尔值真,添加的触发方法就会一直连续执行,步进控制器的值每变化一次方法就会执行一次。autorepeat属性从字面理解为自动重复,当autorepeat属性设置为布尔值真时,用户如果按住步进控制器中的按钮不放,步进控制器的值就会一直连续改变,如果autorepeat设置为布尔值假,直到用户手指抬起完成单击动作,步进控制器的值才会改变,触发方法才会执行。warps属性设置步进控制器的值是否循环,如果设置为布尔值真,当值增加到最大时,用户继续单击增加按钮,值就会从最小值重新开始增加,反之亦然,如果这个属性设置为布尔值假,当步进控制器到达极值的时候,相应的按钮就会被禁用。minimumValue属性设置步进控制器的最小值,maximumValue属性设置步进控制器的最大值。stepValue属性用于设置步进控制器的步长,即每次按下按钮后步进控制器的值改变的大小。tintColor属性设置控件的颜色。步进控制器也是通过addTarget方法添加触发事件的,在触发方法中将会传入UIStepper对象本身,开发者通过获取其值来做相应的逻辑处理,上面代码中的click:方法实现如下,这里打印了UIStepper控件的值。

Swift语言版本:

            func click(stepper:UIStepper)  {
                print(stepper.value)
            }

Objective-C语言版本:

        -(void)click:(UIStepper *)step{
            NSLog(@"%f", step.value);
        }

运行上面的程序代码,会看到如图2-37所示的效果。

图2-37 UIStepper控件

2.12.2 自定义UIStepper按钮图片

在图2-37中可以看到,系统的UIStepper控件默认显示一个减号和一个加号,单击加号值增加,单击减号值减小,开发者也可以通过以下方法自定义两个按钮的图片。

Swift语言版本:

        stepper.setDecrementImage(UIImage(named: "image")? .withRenderingMode(.alwaysOriginal), for: .normal)
        stepper.setIncrementImage(UIImage(named: "image")? .withRenderingMode(.alwaysOriginal), for: .normal)

Objective-C语言版本:

        [stepper setDecrementImage:[[UIImage imageNamed:@"image"]
    imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
        [stepper setIncrementImage:[[UIImage imageNamed:@"image"]
    imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];

setDecrementImage:imageWithRenderingMode:forState方法设置减按钮的图片,setIncrementImage:imageWithRenderingMode: forState方法设置加按钮的图片,效果如图2-38所示。

图2-38 自定义图片的UIStepper