【问题标题】:Accessing outlets from different class in Swift在 Swift 中访问不同类的 outlet
【发布时间】:2016-08-09 20:32:22
【问题描述】:

我什至不能 100% 确定它属于这里,但我需要一些帮助。

基本上,我有 3 组文件: 带有 ViewController 的 Storyboard Viewcontroller 笔尖 > 控制器 笔尖 > 控制器

storyboard tableviewcontroller 将其中一个 nib 作为表格单元加载,另一个只是添加到主故事板视图顶部的视图。

为了说明我在做什么,下面是代码:

let pickerView = UINib(nibName: "DateTimePickerView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! DateTimePickerView

    let testFrame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 200)

    pickerView.frame = testFrame
    ReserveView.addSubview(pickerView)
    pickerView.translatesAutoresizingMaskIntoConstraints = false

    NSLayoutConstraint(item: pickerView, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .LeadingMargin, multiplier: 1.0, constant: 0).active = true

    NSLayoutConstraint(item: pickerView, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .TrailingMargin, multiplier: 1.0, constant: 0).active = true

    NSLayoutConstraint(item: pickerView, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .BottomMargin, multiplier: 1.0, constant: 0.0).active = true

这会将笔尖添加到所显示视图的底部。我想要完成的是:

在作为表格单元格加载的另一个 nib 中:有按钮、标签等,我想通过绘制在视图顶部的 pickerView 与之交互。

希望这张图片可以帮助澄清我正在尝试做的事情,你可以告诉我为什么这是错误的......因为它感觉不是正确的方式。

最终,“pickerView”将在按钮单击时出现,然后在用户选择并确认日期时隐藏。

这是照片:

这是实际项目,因此您可以更好地了解我要做什么:

【问题讨论】:

    标签: ios swift storyboard


    【解决方案1】:

    据我了解,您有一个故事板,它加载了一个带有 tableView 和单元格的笔尖,以及一个带有选择器视图的笔尖。

    如果您的故事板包含对 tableview 的引用以及需要更改的内容,您可以将closures 与pickerview 一起使用。

    在您的选择器视图中添加以下内容:

    var didChange: ((value: String)->())?
    

    在您的故事板类中添加以下代码:

    func pickerDidChange(value: String) {
        debugPrint("The picker changed")
    }
    

    在初始化选择器视图的位置,在 addSubview 上方添加以下内容:

    pickerView.didChange = pickerDidChange
    

    现在,在您的 pickerDidChange 函数中,您将获取所需的数据并将其应用于 tableView 中您持有引用的单元格。

    在 pickerview 中,您将在 onChange 方法中添加以下内容:

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if let didChange = didChange {
            didChange("something")
        }
    }
    

    如果您要改用UIDatePicker,则改为返回NSDate...我想这会更合适。

    我希望我正确理解了您的问题,这可以解决您的问题。

    【讨论】:

    • 我有点困惑。在更改事件的 IBAction 中,我应该添加该函数 pickerView。我怎么称呼它呢?现在,你是对的,它是一个 NSDate 对象。但我只是通过 DateTimePicker 的日期属性访问它。 DateTimePicker.date
    • 真的,我需要将该日期对象传递回加载pickerView xib 文件的VC。然而,xib 有它自己的 UIView 类型的自定义类,我在该类中有实际的选择器作为 IBOutlet。希望这会有所帮助。
    • @Imperialized 你的问题解决了吗?还是需要帮助?
    猜你喜欢
    • 2014-08-11
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多