2015-11-04 37 views
2

我刚刚得到了一些关于我的iOS项目的问题。我现在正在使用xcode 7.0.1。问题是我不能从每个UITableViewCell获得UISwitch的值。有4 UITableViewCell。所以我已经创建了一个对象来存储所有UISwitch值。Swift - 如何从动态UITableView获取所有UISwitch值?

我的模型

import Foundation 

let instanceQuiz = Quiz() 
let instanceSwitchModel = SwitchModel() 

class Quiz: NSObject { 
    var answerList: [Int] = [] 
} 

class SwitchModel : NSObject { 
var switch1 : Bool? = false 
var switch2 : Bool? = false 
var switch3 : Bool? = false 
var switch4 : Bool? = false 
} 

我控制器

import UIKit 
import SwiftyJSON 

class QuizQuestionViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var question: UILabel! 
    @IBOutlet weak var tableView: UITableView! 
    var quizs:[JSON]! = ["a","b","c","d"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return quizs.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("QuizCell", forIndexPath: indexPath) 

     let quiz = quizs[indexPath.row] 
     let switchView: UISwitch = UISwitch(frame: CGRectZero) 

     cell.accessoryView = switchView 
     if let nameLabel = cell.viewWithTag(100) as? UILabel { 
      nameLabel.text = quiz["mcq_answer"].stringValue 
     } 

     return cell 
    } 

@IBAction func btnSubmit(sender: AnyObject) { 
     /* how to capture all UISwitch values and store it into model? */ 
    } 

} 

enter image description here

请指点。谢谢。

+0

“我已经完成创建一个对象来存储所有UISwitch值”。问题是什么? – anhtu

+0

我想在用户点击提交按钮后从UITableViewCell中检索所有UISwitch值。你知不知道怎么?我不能为UISwitch创建IBOutlet,因为它是重复的内容。我看到的是我需要以编程方式进行。 –

+0

我认为“我已经完成了创建一个对象来存储所有UISwitch值”是一个解决方案。创建一个数组存储它们的值。例如:[0,0,...]。当用户打开/关闭一个 - >更新数组。例如:[1,0,...]。 – anhtu

回答

1

您可以为交换机创建视图模型,您可以在用户移动到屏幕时填充初始值,并且每当用户更改任何交换机的状态时更新交换机视图模型的相应值。只要确保您的视图模型和开关具有相同的值,并始终从视图模型中读取值,而不是直接从tableviewcell中的UISwitch中读取值。

class SwitchModel : NSObject { 
    var switch1 : Bool? = false 
    var switch2 : Bool? = false 
    var switch3 : Bool? = false 
    var switch4 : Bool? = false 
} 

QuizQuestionViewController

var switchModel = SwitchModel() 

申报viewDidLoad可以为交换机填充初始值。

从customTableView实施委托,并有switchModel更新的值当用户移动交换机视觉

TestProject可能会有所帮助

+0

代码的外观如何?我不能理解这一点。 –

+0

答案已更新,只是为了提供一个想法 – Usama

+0

我会先试一试。 –

0

我建议你在你的问题模型中使用一个多变量,例如: questionText和 switchValue(布尔)//你可以给switchValue一个默认值,或者当你初始化你的问题时初始化它。

在您的视图控制器中,当您使用json数据初始化您的问题时,请设置questionText。 将问题保存在一系列问题中。

用数组值填充uitableview。在每个单元格中检查switchValue,并根据该值开启/关闭开关。

在您的DidSelectRowAtIndexpath中,如果用户点击单元格,请将switchValue设置为true或false。 就是这样。

希望这有帮助。

+0

任何代码想分享? –