如何在iOS中创建日期滚动器

时间:2018-08-29 12:50:44

标签: ios swift

我正在寻找在iOS中创建日期滚动器的方法。我正在尝试通过sun-sat days在日视图中重现在本机日历应用中找到的滚动条,并能够左右滚动以查看其他星期。

实现此目标的最佳方法是什么?

我尝试用滑动手势操作ContainerView,然后以为我会用新的替换container中的视图(相同视图的副本,但前一周/后一周是日期)。但是,当添加新视图时,它将接管整个视图,而不仅仅是视图容器。

应用程序的设计是:

  

NavViewController-> ViewController->容器->   SwipeViewController

在View Controller内部,我在滑动操作方法中具有以下功能:

let viewController = self.storyboard!.instantiateViewController(withIdentifier: "swipeViewControllerStoryboard") as! SwipeViewController
self.swipeContainer.addSubview(viewController.view)

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解得很好,但是创建自定义PickerView与创建任何其他组件(即tableViews)大致相同。创建一个IBOutlet pickerView。创建从UIPickerView继承的类并实现:

  

UIPickerViewDataSource

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 //maybe more?
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return yourArray.count  
}
  

UIPickerViewDelegate

func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
    return (CGFloat)70 
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    let view = UIView(frame: CGRect(x: 0, y: 0, width: customWidth, height: 100)) //height CGFloat
    //And create your labels here and add to view.addSubView(label)
    //let label = UILabel(frame: CGRect(x: 0, y: 0, width: customWidth, height: 70))
    //...
    //..
    //.

    //use CGAffineTransform and rotate the picker to horizontal 
    view.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180))

    return view
}

返回到ViewController实例化CustomPicker。将pickerView的委托和数据源设置为您的CustomPicker实例。

我敢肯定有很多方法可以做到这一点,这可能是一个hack。也许宁愿找到一种自定义UIDatePicker的方法,但是如果您想使用任何其他数据自定义pickerViews,我会走这条路线。