Swift - 弹出视图,日期选择器?

时间:2015-03-21 19:49:35

标签: ios xcode swift

我已经搜索了几个小时,并尝试了一些教程,但未能实现这一点:

我有一个TableView,我想让它按下一个单元格,显示一个带有日期选择器的弹出窗口。

我的自定义视图控制器带有日期选择器(从底部弹出),但它占据了整个屏幕。思考?我在谷歌搜索时发现了一个这个确切的问题,但解决方案没有用。

3 个答案:

答案 0 :(得分:1)

一种可能性是在您的tableview上叠加子视图(UIView的对象)(带有日期选择器和完成按钮)。然后使用子视图的.hidden功能隐藏/显示视图。以下是tableviewcontroller的示例。设置故事板时,请确保子视图具有布局约束,以便正确定位日期选择器。我使用"解决了自动布局问题"它运作良好。除非您进行特殊处理,否则子视图将位于行的底部。如果你有很多行,aubview将被完全修剪或隐藏。因此,最好将子视图放置在自动布局中相对于页面底部的位置。

这是一个适合我的简单示例。在viewDidLoad中隐藏子视图。当您单击任何行时,它将显示子视图和日期选择器。按完成后,它将再次隐藏子视图。

import UIKit

class TableViewController: UITableViewController {

    @IBAction func doneButton(sender: UIButton) {
        // process the date using datePickerOutlet properties
        subView.hidden = true // hide the subview and its components
    }
    @IBOutlet weak var subView: UIView!
    @IBOutlet weak var datePickerOutlet: UIDatePicker!
    @IBAction func datePicker(sender: UIDatePicker) {
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        subView.hidden = true // hide the subview and its components
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("\(indexPath.row)")
        subView.hidden = false // show the subview and its components
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel!.text = "\(indexPath.row)"
        return cell
    }
}

答案 1 :(得分:0)

或者,将它放在UIAlertView()中。至少它会集中。在小屏幕上组合一个桌子和一个选择器是很困难的,比如让我们说一个4S。

答案 2 :(得分:0)

我认为这应该有效:

override var preferredContentSize: CGSize {
    get{
        // Checks if it is currently presenting
        if presentingViewController != nil {
            return (datePicker.sizeThatFits(presentingViewController!.view.bounds.size))
        }
        return super.preferredContentSize
    }
    set{ super.preferredContentSize = newValue }
}

此代码位于弹出窗口的View控制器下。 基本上它的作用是将弹出窗口的宽度设置为日期选择器所需的最小大小。

来自Paul Hegarty的iTunes U教程