【发布时间】:2015-03-24 00:47:33
【问题描述】:
当我运行我的代码时,一切都运行良好,没有错误。但是,当我尝试使用添加按钮、segue 和文本字段将单元格添加到我的表格视图时,我无法这样做。发生的情况是,当我将对象(自定义)附加到用于创建单元格的数组时,该数组被清空并再次填充。这样做的结果是一次在表格视图中只有一个单元格。代码如下..
Routine.swift:
struct Routine {
var name: String?
var desc: String?
}
RoutineListViewController.swift:
class RoutineListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var routines = [Routine]()
override func viewDidLoad() {
super.viewDidLoad()
println("There are \(routines.count) routine(s).")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return routines.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("RoutineCell", forIndexPath: indexPath) as UITableViewCell
var cellName = routines[indexPath.row].name!
cell.textLabel?.text = cellName
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
}
EditRoutineViewController:
class EditRoutineViewController: UIViewController {
var newRoutine = Routine(name: "", desc: "")
var routineName: String?
var routineDescription: String?
var allTextFields: UITextField?
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var descriptionField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
allTextFields = textField
if (textField.placeholder == "Name") {
if (textField.text != nil) {
routineName = textField.text
println("Routine name set as '\(routineName)'")
}
textField.resignFirstResponder()
return true
} else if (textField.placeholder == "Description") {
if (textField.text != nil) {
routineDescription = textField.text
println("Routine description set as '\(routineDescription!)'")
}
textField.resignFirstResponder()
return true
}
return true
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let navController = segue.destinationViewController as UINavigationController
let RoutineListController = navController.topViewController as RoutineListViewController
println("There are \(RoutineListController.routines.count) routines in the routines array.")
RoutineListController.routines.append(newRoutine)
println("There are \(RoutineListController.routines.count) routines in the routines array.")
println("A new routine called \(newRoutine.name!) has been added to the routines array.")
}
@IBAction func cancel(sender: AnyObject) {
allTextFields?.endEditing(true)
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func done(sender: AnyObject) {
routineName = self.nameField.text
routineDescription = self.descriptionField.text
if (self.nameField.text == "") {
// Display alert view
let nameAlert = UIAlertController(title: "Oops!", message:
"Make sure you enter a name for the routine", preferredStyle: UIAlertControllerStyle.Alert)
nameAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil))
self.presentViewController(nameAlert, animated: true, completion: nil)
} else {
println("A routine called \(self.routineName!) is about to be created.")
if (self.routineDescription != nil) {
println("It has a description of '\(self.routineDescription!)'.")
}
var localRoutine = Routine(name: routineName, desc: routineDescription?)
self.newRoutine = localRoutine
view.endEditing(true)
self.performSegueWithIdentifier("showRoutines", sender: nil)
}
}
}
【问题讨论】:
标签: swift