我见过类似的问题,但我对iOS很新,并且不太了解应用我的方案的答案。我正在制作一个包含核心数据的iPad应用程序,并且想要一个横向显示两个tableView的横向视图。我不知道如何从我的vc.swift文件中指定第二个tableView。此代码显示两个相同的表。编辑:我现在可以指定不同的表视图,但我不能发送不同的coredata到每个。问题似乎从DidLoad开始,它无法看到tableView,因此每次都必须获取所有数据。
数据来自同一个实体,它只有不同的属性(这就是为什么我用playerFetchRequest创建了一个带参数的函数 - 以为我可以用diff参数做出不同的获取请求):
import UIKit
import CoreData
class CustomTableViewCell : UITableViewCell {
@IBOutlet var l1: UILabel?
@IBOutlet var l2: UILabel?
func loadItem(#number: String, name: String) {
l1!.text = number
l2!.text = name
}
}
class ViewController: UIViewController, UITableViewDelegate, NSFetchedResultsControllerDelegate, UITableViewDataSource {
@IBOutlet var tableView: UITableView!
//this is my second table - Ive connected it in the IB to this VC
@IBOutlet var tableView2: UITableView!
let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext
var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()
func playerFetchRequest(playerType: String) -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Players")
let sortDescriptor = NSSortDescriptor(key: "number", ascending: true)
let filterForwards = NSPredicate(format: "%K = %@", "type", playerType)
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.predicate = filterForwards
return fetchRequest
}
func getFetchedResultController(playerType: String) -> NSFetchedResultsController {
fetchedResultController = NSFetchedResultsController(fetchRequest: playerFetchRequest("Forward"), managedObjectContext:managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
return fetchedResultController
}
//remember: to create a table with multiple sections just implement the numberOfSectionsInTableView(_:) method
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
{return numberOfRowsInSection} else {return 0}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:CustomTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("customCell") as CustomTableViewCell
let player = fetchedResultController.objectAtIndexPath(indexPath) as DataModel
cell.l2?.text = player.lastName + ", " + player.firstName
cell.l1?.text = player.number
return cell
}
func tableView(tableView: UITableView!, didDeselectRowAtIndexPath indexPath: NSIndexPath!) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
println("You selected cell #\(indexPath.row)!")
}
override func viewDidLoad() {
var nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "customCell")
fetchedResultController = getFetchedResultController("Forward")
fetchedResultController.delegate = self
fetchedResultController.performFetch(nil)
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func controllerDidChangeContent(controller: NSFetchedResultsController!) {
tableView.reloadData()
}
}
答案 0 :(得分:3)
我认为你应该这样检查
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([tableView isEqual: tableView1]) {
// Do something
}
else { // tableView == tableView2
// Do something else
}
}
与tableview的其他方法类似。