一个视图控制器中的两个表视图 swift
Posted
技术标签:
【中文标题】一个视图控制器中的两个表视图 swift【英文标题】:two table views in one viewcontroller swift 【发布时间】:2016-01-13 18:35:08 【问题描述】:我正在尝试快速制作一个优缺点列表,但每当我删除一个缺点时,它就会删除一个优点。我认为索引路径链接到优缺点视图控制器是一个问题,但我不知道如何或在哪里可以将它们分开
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】:如果你想在一个视图控制器中实现所有这些,你可以试试这个:
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
中实例化这些帮助类,并将它们分配给你的表视图的dataSource
和delegate
属性。您还需要在某处为它们提供强有力的参考,因为dataSource
和delegate
属性是星期。
【讨论】:
以上是关于一个视图控制器中的两个表视图 swift的主要内容,如果未能解决你的问题,请参考以下文章