2014-10-06 8 views
6

ich den folgenden Code hat zwei Tabellen aus zwei verschiedenen Arrays in einer Ansicht bevölkerten anzuzeigen:Zwei Tabellen auf einem Blick in schnellen

@IBOutlet var RFTable: UITableView 
    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.RFTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
    } 
    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
     return self.RFArray.count; 
    } 
    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) ->  UITableViewCell! { 
     var cell:UITableViewCell = self.RFTable.dequeueReusableCellWithIdentifier("cell") as  UITableViewCell 

     cell.textLabel.text = String(self.RFArray[indexPath.row]) 

     return cell 
    } 

    @IBOutlet var IMProdTable: UITableView 
    func tableView2(IMProdTable: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)  { 

    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.IMProdTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell2") 
    } 
    func tableView2(IMProdTable: UITableView!, numberOfRowsInSection section: Int) -> Int { 
    return self.IMProdArray.count; 
    } 
    func tableView2(IMProdTable: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) ->  UITableViewCell! { 
     var cell2:UITableViewCell = self.IMProdTable.dequeueReusableCellWithIdentifier("cell2") as UITableViewCell 

     cell2.textLabel.text = String(self.IMProdArray[indexPath.row]) 

     return cell2 
    } 

Ich habe die erste Tabelle arbeiten, und dann kopiert und eingefügt den Text, Ersetzen der Array-Namen und der Tabellenansichtsnamen und Verbinden des Delegaten und der Datenquelle. Allerdings zeigt Xcode 'ungültige Deklaration von viewdidload' auf dem zweiten (eingefügten) Code an. Wenn ich das anstelle von ViewDidload zu 'fund loadView() {' erstelle, wird die App erstellt. Wenn ich es teste, sehen beide Tabellen genau dieselben Daten wie die Daten in 'RFArray'. Ich bin sehr neu in der Codierung und kann nicht sehen, was ich getan habe, bitte helfen.

Antwort

11
@IBOutlet var RFTable: UITableView 
@IBOutlet var IMProdTable: UITableView 

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.RFTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
    self.IMProdTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell2") 
} 

func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
    if tableView == RFTable { 
    return self.RFArray.count; 
    } else { 
    return self.IMProdArray.count; 
    } 
} 

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) ->  UITableViewCell! { 
    if tableView == RFTable { 
    var cell:UITableViewCell = self.RFTable.dequeueReusableCellWithIdentifier("cell") as  UITableViewCell 
    cell.textLabel.text = String(self.RFArray[indexPath.row]) 
    return cell 
    } else { 
    var cell2:UITableViewCell = self.IMProdTable.dequeueReusableCellWithIdentifier("cell2") as UITableViewCell 
    cell2.textLabel.text = String(self.IMProdArray[indexPath.row]) 
    return cell2 
    } 
} 

Nur eine kurze Bearbeitung. Sie müssen die Delegate- und die Datenquellenmethode unverändert lassen und überprüfen, welche TableView-Instanz die Nachricht tatsächlich sendet.

Sie können dieselbe Methode nicht zweimal in einer abgeleiteten Klasse überschreiben.

+1

Vielen Dank, das hat Sinn gemacht, danke für die Erklärung. Arbeitete zum ersten Mal – samp17

0

Stellen Sie außerdem sicher, dass Sie nach dem Abrufen der Daten in TableviewCell jedes TableView neu laden.

beispiels

@IBOutlet var RFTable: UITableView 
@IBOutlet var IMProdTable: UITableView 

override func viewDidLoad() { 

    super.viewDidLoad() 
    self.RFTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell1") 
    self.IMProdTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell2") 

    RFTable.reloadData() 
    IMProdTable.reloadData() 
} 
2

Erstellen Sie zunächst zwei Datasource implementiert Klassen ersten Datenquelle

class FirstDataSouce: NSObject,UITableViewDataSource,UITableViewDelegate { 

    var items: [String] = [] 


    override init(){ 
     super.init() 
    } 

    func setData(items:[String]){ 
     self.items = items 
    } 



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return items.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "RecentTableViewCell") as! RecentTableViewCell 

     cell.titleLabel.text = items[indexPath.row] 

    return cell 
    } 
} 

zweite Datenquelle

class SecondDataSouce: NSObject,UITableViewDataSource,UITableViewDelegate { 

    var items: [String] = [] 


    override init(){ 
     super.init() 
    } 

    func setData(items:[String]){ 
     self.items = items 
    } 



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return items.count 
    } 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "RecentTableViewCell") as! RecentTableViewCell 

     cell.titleLabel.text = items[indexPath.row] 

    return cell 
} 
} 

Set-Datenquelle in Tableview Viewcontroller

012.351.
class ViewController: UIViewController{ 
    @IBOutlet weak var tableView1: UITableView! 
    @IBOutlet weak var tableView2: UITableView! 

    var dataSource1: FirstDataSouce! 
    var dataSource2: SecondDataSouce! 

    func prepareTableViews(){ 

     let items1 = [“a”,”b”,”c”] 
     dataSource1 = FirstDataSouce() 
     dataSource1.setData(items: items1) 
     self.tableView1.dataSource = dataSource1 
     self.tableView1.delegate = dataSource1 
     self.tableView1.register(SelectorTableViewCell.self, 
            forCellReuseIdentifier: 
                "TableViewCell") 
     self.tableView1.tableFooterView = UIView() 

     let items2 = [“1”,”2”,”3”] 
     dataSource2 = SecondDataSouce() 
     dataSource2.setData(items: items2) 
     self.recentTableView.dataSource = dataSource2 
     self.recentTableView.delegate = dataSource2 
     self.recentTableView.register(RecentTableViewCell.self, 
              forCellReuseIdentifier: 
                "TableViewCell") 
     self.recentTableView.tableFooterView = UIView() 
    } 
}