一个viewcontroller swift中的两个表视图

时间:2016-01-13 18:35:08

标签: ios swift uitableview swift2 tableview

我试图在swift中制作一个优点和缺点列表,但每当我删除它时它会删除一个专业版。我认为将索引路径链接到优缺点视图控制器是一个问题,但我不知道如何或在哪里可以将它们分开

class prosConsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
@IBOutlet var prosTableViewOutlet: UITableView!
@IBOutlet var consTableViewOutlet: UITableView!



@IBOutlet var tableViewOutlet: UITableView!

var colleges : [NetCollege] = []


@IBOutlet var consTableView: UITableView!
var collegesTwo : [NetCollegeTwo] = []

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    if tableView == tableViewOutlet
    {
        return colleges.count
    }
    else
    {
        return collegesTwo.count
    }
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    if tableView == tableViewOutlet
    {
        let cell = tableViewOutlet.dequeueReusableCellWithIdentifier("cellID")  as! tableViewCell
        //the line under maybe?
        let college = colleges[indexPath.row]

        cell.textLabel?.text = college.name


        return cell

    }
    else
    {
        let cellTwo = consTableView.dequeueReusableCellWithIdentifier("IDCell")  as! tableViewCell
        let collegeTwo = collegesTwo[indexPath.row]

        cellTwo.textLabel?.text = collegeTwo.conName


        return cellTwo

    }
}



override func viewDidLoad()
{
    super.viewDidLoad()
    editButtonItem().tag = 0

    func shouldAutorotate() -> Bool {
        return false
    }

    func supportedInterfaceOrientations() -> Int {
        return UIInterfaceOrientation.LandscapeRight.rawValue
    }


}




@IBAction func plusButtonTwo(sender: UIBarButtonItem)
{
    let alertTwo = UIAlertController(title: "Add Con", message: nil, preferredStyle: .Alert)
            alertTwo.addTextFieldWithConfigurationHandler
                { (textField) -> Void in
                    textField.placeholder = "Add Con Here"
            }
            let cancelActionTwo = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
            alertTwo.addAction(cancelActionTwo)


            let addActionTwo = UIAlertAction(title: "Add", style: .Default) { (action) -> Void in
                let addCollegesTextFieldTwo = (alertTwo.textFields?[0])! as UITextField

                let netCollegeTwo = NetCollegeTwo(nameTwo: addCollegesTextFieldTwo.text!)


                self.collegesTwo.append(netCollegeTwo)
                self.consTableView.reloadData()
            }

            alertTwo.addAction(addActionTwo)
            self.presentViewController(alertTwo, animated: true, completion: nil)


}
@IBAction func onTappedPlusButton(sender: UIBarButtonItem)
{

    let alert = UIAlertController(title: "Add Pro", message: nil, preferredStyle: .Alert)
    alert.addTextFieldWithConfigurationHandler
        { (textField) -> Void in
        textField.placeholder = "Add Pro Here"
        }
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
    alert.addAction(cancelAction)


    let addAction = UIAlertAction(title: "Add", style: .Default) { (action) -> Void in
        let addCollegesTextField = (alert.textFields?[0])! as UITextField

        let 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, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
    if editingStyle == UITableViewCellEditingStyle.Delete
    {

            colleges.removeAtIndex(indexPath.row)
            tableViewOutlet.reloadData()

    }

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool
{
    return true
}

1 个答案:

答案 0 :(得分:4)

如果要在一个视图控制器中实现所有这些,可以尝试:

  func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
{
    if editingStyle == UITableViewCellEditingStyle.Delete
    {
        if tableView == tableViewOutlet
        {
           colleges.removeAtIndex(indexPath.row)
           tableView.reloadData()
        }
        else
        {
           collegesTwo.removeAtIndex(indexPath.row)
           tableView.reloadData()
        }
    }
}

但在这种情况下,更好的解决方案是创建两个类,如DataSourceOne,DataSourceTwo(或TableViewModelOne,TableViewModelTwo),并在那里实现所有相关逻辑。这甚至可能只是一个类DataSource的两个实例,具体取决于您需要什么。然后,您可以在viewDidLoad中实例化这些帮助程序类,并将它们分配给表视图的dataSourcedelegate属性。您还需要在某处为他们提供强有力的参考,因为dataSourcedelegate属性是一周。