Swift/UICatalog/StepperViewController.swift

/*
    Copyright (C) 2015 Apple Inc. All Rights Reserved.
    See LICENSE.txt for this sample’s licensing information
    
    Abstract:
    A view controller that demonstrates how to use UIStepper.
*/
 
import UIKit
 
class StepperViewController: UITableViewController {
    // MARK: Properties
 
    @IBOutlet weak var defaultStepper: UIStepper!
 
    @IBOutlet weak var tintedStepper: UIStepper!
    
    @IBOutlet weak var customStepper: UIStepper!
 
    @IBOutlet weak var defaultStepperLabel: UILabel!
    
    @IBOutlet weak var tintedStepperLabel: UILabel!
    
    @IBOutlet weak var customStepperLabel: UILabel!
 
    // MARK: View Life Cycle
 
    override func viewDidLoad() {
        super.viewDidLoad()
 
        configureDefaultStepper()
        configureTintedStepper()
        configureCustomStepper()
    }
 
    // MARK: Configuration
 
    func configureDefaultStepper() {
        defaultStepper.value = 0
        defaultStepper.minimumValue = 0
        defaultStepper.maximumValue = 10
        defaultStepper.stepValue = 1
 
        defaultStepperLabel.text = "\(Int(defaultStepper.value))"
        defaultStepper.addTarget(self, action: "stepperValueDidChange:", forControlEvents: .ValueChanged)
    }
 
    func configureTintedStepper() {
        tintedStepper.tintColor = UIColor.applicationBlueColor()
 
        tintedStepperLabel.text = "\(Int(tintedStepper.value))"
        tintedStepper.addTarget(self, action: "stepperValueDidChange:", forControlEvents: .ValueChanged)
    }
 
    func configureCustomStepper() {
        // Set the background image.
        let stepperBackgroundImage = UIImage(named: "stepper_and_segment_background")
        customStepper.setBackgroundImage(stepperBackgroundImage, forState: .Normal)
 
        let stepperHighlightedBackgroundImage = UIImage(named: "stepper_and_segment_background_highlighted")
        customStepper.setBackgroundImage(stepperHighlightedBackgroundImage, forState: .Highlighted)
 
        let stepperDisabledBackgroundImage = UIImage(named: "stepper_and_segment_background_disabled")
        customStepper.setBackgroundImage(stepperDisabledBackgroundImage, forState: .Disabled)
 
        // Set the image which will be painted in between the two stepper segments (depends on the states of both segments).
        let stepperSegmentDividerImage = UIImage(named: "stepper_and_segment_divider")
        customStepper.setDividerImage(stepperSegmentDividerImage, forLeftSegmentState: .Normal, rightSegmentState: .Normal)
 
        // Set the image for the + button.
        let stepperIncrementImage = UIImage(named: "stepper_increment")
        customStepper.setIncrementImage(stepperIncrementImage, forState: .Normal)
 
        // Set the image for the - button.
        let stepperDecrementImage = UIImage(named: "stepper_decrement")
        customStepper.setDecrementImage(stepperDecrementImage, forState: .Normal)
 
        customStepperLabel.text = "\(Int(customStepper.value))"
        customStepper.addTarget(self, action: "stepperValueDidChange:", forControlEvents: .ValueChanged)
    }
 
    // MARK: Actions
 
    func stepperValueDidChange(stepper: UIStepper) {
        NSLog("A stepper changed its value: \(stepper).")
 
        // A mapping from a stepper to its associated label.
        let stepperMapping: [UIStepper: UILabel] = [
            defaultStepper: defaultStepperLabel,
            tintedStepper: tintedStepperLabel,
            customStepper: customStepperLabel
        ]
 
        stepperMapping[stepper]!.text = "\(Int(stepper.value))"
    }
}