【问题标题】:Get UITextFields(1st Class) and Switches (2nd Class) values from other Class at runtime在运行时从其他类获取 UITextFields(1st Class) 和 Switches (2nd Class) 值
【发布时间】:2016-10-18 14:16:30
【问题描述】:

我想从 PropertiesViewController.swift 中获取 5 个 UITextFields 的值,从ConditionViewController 中获取 8 个开关的值(这两个类都是 TabController 的一部分)。一旦用户单击 saveMeter(),我想将用户输入的值插入 CoreData。我的问题是当我尝试从另一个拥有所有 CRUD 操作的类访问两个视图时。当我点击 Properties 或 ConditionsViewController 上的保存按钮时,即使我只是输入了一个值,文本和开关值也会返回 nil。

该类名为 CRUDController,这里是必须重要的代码:

类 CRUDController: UIViewController {

变量条件:ConditionViewController

var 属性:PropertiesViewController

init(){

//我明白下面我正在创建一个新实例而不是原始实例

//但 swift 强迫我初始化它们,我不知道其他方法。

// 我也尝试过这样引用它们:

//var 条件:ConditionViewController var 属性:PropertiesViewController

//来自函数 saveMeter 但文本中的值仍然为空。

   conditions = ConditionsViewController()
    properties =  PropertiesViewController()

    super.init(nibName: nil, bundle:nil)

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func saveMeter() {

    //conditions.setConditions()
    //properties.setProperties()

        //creating empty meter
        let m1 = Meter(context: MOC)

//这是我在 Coredata 中设置 Meter 对象的值

        //conditions values
        m1.newMeterCond1 = conditions.newMeterCond1Val
        m1.newMeterCond2 = conditions.newMeterCond2Val
        m1.newMeterCond3 = conditions.newMeterCond3Val
        m1.oldMeterCond1 = conditions.oldMeterCond1Val
        m1.oldMeterCond2 = conditions.oldMeterCond2Val
        m1.oldMeterCond3 = conditions.oldMeterCond3Val
        m1.oldMeterCond4 = conditions.oldMeterCond4Val
        m1.oldMeterCond5 = conditions.oldMeterCond5Val
        m1.cnc = conditions.CNCVal 

       //properties values                
       m1.outKW =  properties.OutKWFromTextField
        m1.outKWH = properties.OutKWHFromTextField
       m1.outKVARH = properties.OutKVARHFromTextField
       m1.multiplier = properties.multiplierFromTextField
       m1.newMeterNumber = properties.newMeterNumberFromTextField


        APPD.saveContext()

}

}

以下是我获取文本字段和开关的类:

类ConditionViewController:UIViewController {

//variables to set

var newMeterCond1Val = Bool()
var newMeterCond2Val = Bool()
var newMeterCond3Val = Bool()
var oldMeterCond1Val = Bool()
var oldMeterCond2Val = Bool()
var oldMeterCond3Val = Bool()
var oldMeterCond4Val = Bool()
var oldMeterCond5Val = Bool()
var CNCVal = Bool()

@IBOutlet weak var oldMeterNumber: UILabel!
@IBOutlet weak var newMeterNumber: UILabel!
var oldMeterFromCell = String()
var newMeterFromTabChild = String()

//old meter conditions
@IBOutlet weak var oldMeterCond1: UISwitch!
@IBOutlet weak var oldMeterCond2: UISwitch!
@IBOutlet weak var oldMeterCond3: UISwitch!
@IBOutlet weak var oldMeterCond4: UISwitch!
@IBOutlet weak var oldMeterCond5: UISwitch!

//new meter conditions
@IBOutlet weak var newMeterCond1: UISwitch!
@IBOutlet weak var newMeterCond2: UISwitch!
@IBOutlet weak var newMeterCond3: UISwitch!


@IBOutlet weak var CNC: UISwitch!

@IBAction func saveMeter(_ sender: AnyObject) {

   //this is where I am calling the function from CRUDController
    CRUD.saveMeter()
}

}

类 PropertiesViewController: UIViewController, UITextFieldDelegate {

var oldMeterFromCell = String()

//variables to set
var OutKWHFromTextField = Float()
var OutKWFromTextField = Float()
var OutKVARHFromTextField = Float()
var newMeterNumberFromTextField = String()
var multiplierFromTextField = Float()

@IBOutlet weak var OldMeterLabel: UILabel!

//new meter properties
@IBOutlet weak var OutKWH: UITextField!
@IBOutlet weak var OutKW: UITextField!
@IBOutlet weak var OutKVARH: UITextField!
@IBOutlet weak var newMeterNumber: UITextField!
@IBOutlet weak var multiplier: UITextField!

}

我已经尝试使用 init() 和所需的 init() 从它们的每个类中初始化 UITextField 和 Switch,我还尝试使用便捷的 init(),我还使用自定义 set 函数初始化它们。我还为 CRUDController 类上的两个类创建了一个实例,但是当我点击保存按钮时,文本值仍然为零。我不能使用 segue,因为我有 2 个视图,即使可以,我也不想。我需要从 CRUDController 类中访问原始 PropertiesController 和 ConditionsController 并且我不知道该怎么做,因为我对委派的概念以及如何使事情正常工作感到非常困惑,所以我需要解决问题的代码,没有概念

【问题讨论】:

    标签: core-data delegates uitextfield swift3 uiswitch


    【解决方案1】:

    我发现可以解决此问题的唯一方法是将 StoryBoard 中不同视图的所有开关、UITextfields、动作等连接到一个可以访问所有元素的类。这样就不需要实例化一个类来访问另一个类。

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2010-11-01
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多