自定义PickerView iOS

自定义PickerView iOS,ios,swift,Ios,Swift,我已经实现了PickerView,但我想像闹钟应用程序一样定制它 您可以看到每个组件行都有“小时”或“分钟”。我想设置“小时”和“分钟”来站在这里,每一个没有被选择的元素,它们没有“小时”或“分钟”,只是被选择的元素有“小时”或“分钟”。 如何做到这一点 这是我的密码: import UIKit class StoryAddViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { @

我已经实现了PickerView,但我想像闹钟应用程序一样定制它

您可以看到每个组件行都有“小时”或“分钟”。我想设置“小时”和“分钟”来站在这里,每一个没有被选择的元素,它们没有“小时”或“分钟”,只是被选择的元素有“小时”或“分钟”。 如何做到这一点

这是我的密码:

import UIKit

class StoryAddViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

  @IBOutlet var titleTextField: TextField!
  @IBOutlet var hashtagsTextField: TextField!
  @IBOutlet var createButton: UIButton!
  @IBOutlet var timePickerView: UIPickerView!
  var timePickerDataBase = [ ["1", "2" , "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], ["1", "2" , "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26" , "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"] ]
  var hour = String()
  var minute = String()

  var story: Story?

  override func viewDidLoad() {
    super.viewDidLoad()
    title = "Add new story"
    view.backgroundColor = Colors.primaryBackgroundColor
    (tabBarController as! SLTabBarController).toggleTabBar(animated: false, showed: false)

    createButton.backgroundColor = Colors.tintColor
    createButton.tintColor = UIColor.whiteColor()
  }

  override func viewWillAppear(animated: Bool) {
    if story == nil {
      story = Story.create(getDatabase())
    }

    titleTextField.text = story?.title
    hashtagsTextField.text = story?.hashtags.joinWithSeparator(", ")
    super.viewWillAppear(animated)
  }

  override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    (tabBarController as! SLTabBarController).toggleTabBar(animated: true, showed: true)
  }

  @IBAction func handleViewTap(sender: AnyObject) {
    view.endEditing(true)
  }

  @IBAction func handleCreateButtonTap(sender: UIButton) {
    story?.title = titleTextField.text!
    story?.hashtags = hashtagsTextField.text!.split("\\s*,\\s*")

    try! story?.save()
    navigationController?.popViewControllerAnimated(true)
  }

// MARK: handle picker view

  func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return timePickerDataBase.count
  }

  func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return timePickerDataBase[component].count
  }

  func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return timePickerDataBase[component][row]
  }

  func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    let pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.blueColor()
    if component == 0 {
      pickerLabel.text = timePickerDataBase[component][row] + "   Hour"
      pickerLabel.font = UIFont(name: "Arial-BoldMT", size: 25)
      pickerLabel.textAlignment = NSTextAlignment.Center
    } else {
      pickerLabel.text = timePickerDataBase[component][row] + "   Minute "
      pickerLabel.font = UIFont(name: "Arial-BoldMT", size: 25)
      pickerLabel.textAlignment = NSTextAlignment.Center
    }
    return pickerLabel
  }

  func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
    return 140
  }

  func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    print(component)
    print(row)
    switch component {
    case 0:
      hour = timePickerDataBase[component][row]
      print(hour)
    case 1:
      hour = timePickerDataBase[component][row]
      print(minute)
    default:
      break
    }
  }
}

我不建议您以我认为您正在尝试的方式动态地更改字段的值(这看起来很奇怪),但是如果您真的必须这样做,您应该重新加载所有数据

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    // reload the data source or save current value
    pickerView.reloadAllComponents() // <---- use this to reload picker 
}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    // setup the cells how you want to based on data source / current value
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
//重新加载数据源或保存当前值
pickerView.reloadAllComponents()//UIView{
//根据数据源/当前值设置单元格的显示方式
}

我不建议您以我认为您正在尝试的方式动态更改字段的值(这看起来很奇怪),但如果您真的必须这样做,您应该在中重新加载所有数据

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    // reload the data source or save current value
    pickerView.reloadAllComponents() // <---- use this to reload picker 
}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
    // setup the cells how you want to based on data source / current value
}
func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){
//重新加载数据源或保存当前值
pickerView.reloadAllComponents()//UIView{
//根据数据源/当前值设置单元格的显示方式
}

您想说的是,只有选定的值应该有“小时”和“分钟”,所有其他的都应该有数字?如果是这样,我建议你用另一种方法,因为如果你想动态刷新值然后签出我的答案,那么在值旋转时刷新值不会很好。否则我建议用一个选择器,然后是“小时”标签,然后是另一个选择器和“分钟”标签…或者,有第一个和默认值,如0H:0M,然后剩下的只有数字如果我使用2选择器视图,每件事都很简单,我只需要在它们旁边添加2个标签。确切地说,我就是这样做的:)你是想说,只有选定的值应该有“小时”和“分钟”吗,所有其他的都应该有数字?如果是这样,我建议你用另一种方法,因为如果你想动态刷新值然后签出我的答案,那么在值旋转时刷新值不会很好。否则我建议用一个选择器,然后是“小时”标签,然后是另一个选择器和“分钟”标签…或者,有第一个和默认值,如0H:0M,然后剩下的只是数字如果我使用2选择器视图,每件事都很简单,我只需要在它们旁边添加2个标签。确切地说,我就是这样做的:)