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