I am trying to make a pros and cons list in swift using table views. I got the first list to work but when I added the second one it is just copying the first.
import UIKit
class prosConsViewController: UIViewController
{
@IBOutlet var tableViewOutlet: UITableView!
var colleges : [NetCollege] = []
@IBOutlet var consTableView: UITableView!
var collegesTwo : [NetCollegeTwo] = []
override func viewDidLoad()
{
super.viewDidLoad()
editButtonItem().tag = 0
}
@IBAction func onTappedPlusButton(sender: UIBarButtonItem)
{
var alert = UIAlertController(title: "Add Pro", message: nil, preferredStyle: .Alert)
alert.addTextFieldWithConfigurationHandler
{ (textField) -> Void in
textField.placeholder = "Add Pro Here"
}
var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(cancelAction)
var addAction = UIAlertAction(title: "Add", style: .Default) { (action) -> Void in
var addCollegesTextField = alert.textFields?[0] as! UITextField
var netCollege = NetCollege(name: addCollegesTextField.text)
self.colleges.append(netCollege)
self.tableViewOutlet.reloadData()
}
alert.addAction(addAction)
self.presentViewController(alert, animated: true, completion: nil)
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!
{
let cell = tableViewOutlet.dequeueReusableCellWithIdentifier("cellID") as! tableViewCell
//the line under maybe?
var college = colleges[indexPath.row]
cell.textLabel?.text = college.name
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return colleges.count
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
if editingStyle == UITableViewCellEditingStyle.Delete
{
colleges.removeAtIndex(indexPath.row)
tableView.reloadData()
}
}
func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return true
}
func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath)
{
var collegeList = colleges[sourceIndexPath.row]
colleges.removeAtIndex(sourceIndexPath.row)
colleges.insert(collegeList, atIndex: destinationIndexPath.row)
}
cons list starts here
@IBAction func plusButtonTwo(sender: UIBarButtonItem)
{
var alertTwo = UIAlertController(title: "Add Con", message: nil, preferredStyle: .Alert)
alertTwo.addTextFieldWithConfigurationHandler
{ (textField) -> Void in
textField.placeholder = "Add Con Here"
}
var cancelActionTwo = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
alertTwo.addAction(cancelActionTwo)
var addActionTwo = UIAlertAction(title: "Add", style: .Default) { (action) -> Void in
var addCollegesTextFieldTwo = alertTwo.textFields?[0] as! UITextField
var netCollegeTwo = NetCollegeTwo(nameTwo: addCollegesTextFieldTwo.text)
self.collegesTwo.append(netCollegeTwo)
self.consTableView.reloadData()
}
alertTwo.addAction(addActionTwo)
self.presentViewController(alertTwo, animated: true, completion: nil)
}
func consTableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!
{
let cellTwo = consTableView.dequeueReusableCellWithIdentifier("IDCell") as! tableViewCell
var collegeTwo = collegesTwo[indexPath.row]
cellTwo.textLabel?.text = collegeTwo.conName
return cellTwo
}
func consTableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return collegesTwo.count
}
func consTableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
if editingStyle == UITableViewCellEditingStyle.Delete
{
collegesTwo.removeAtIndex(indexPath.row)
consTableView.reloadData()
}
}
func consTableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
return true
}
func consTableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath)
{
var collegeListTwo = collegesTwo[sourceIndexPath.row]
collegesTwo.removeAtIndex(sourceIndexPath.row)
collegesTwo.insert(collegeListTwo, atIndex: destinationIndexPath.row)
}
}
You cannot just change the signature of the UITableViewDelegate
/ UITableViewDataSource
methods from tableView:cellForRowAtIndexPath:
to consTableView:cellForRowAtIndexPath:
and expect it to work. Both tables will just call tableView:cellForRowAtIndexPath:
and show the same results.
If you want the same object to be the delegate and data source for both of your tables, you need to create an IBOutlet
for both of your tables and put an if
statement in your delegate and data source method implementations to provide different behavior depending on which table view is calling the method.
For example:
class prosConsViewController: UIViewController {
@IBOutlet var prosTableViewOutlet: UITableView!
@IBOutlet var consTableViewOutlet: UITableView!
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell! {
if tableView == prosTableViewOutlet {
// Pros logic
}
else {
// Cons logic
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.