2016-08-15 9 views
1

Ich möchte Daten der Tabellenansicht Zelle in der Sammlungsansicht verwenden. Diese sind in demselben Controller. Wie kann ich das machen ? Wenn ich dies versuche, kommt Delegate nil und nichts passiert. Novermind CellForRowAtIndexPath, NumberOfRowsInSection-Methoden.Wie kann ich es über Delegate und Protokoll beheben?

protocol DataDelegate { 
func dataInfo(survey:Survey) 


} 

import UIKit 

class SurveyViewControllerLeftTableView: UITableView,UITableViewDataSource,UITableViewDelegate { 

var survey = [Survey]() 

var myDelegate : DataDelegate? 

override func awakeFromNib() { 
    self.dataSource=self 
    self.delegate=self 

} 



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


    myDelegate?.dataInfo(survey[(indexPathForSelectedRow?.row)!]) 

} 

} 


import UIKit 

class BottomCollectionView: UICollectionView,UICollectionViewDataSource,UICollectionViewDelegate,DataDelegate { 


var surveyBottomCollection = [Survey]() 



override func awakeFromNib() { 
super.awakeFromNib() 


self.delegate = self 
self.dataSource = self 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return surveyBottomCollection.count 
} 


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell : BottomCollectionViewCell = dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! BottomCollectionViewCell 

    cell.surveyQuestionNumberLabel.text = surveyBottomCollection[indexPath.row].questionNumber 
cell.surveyQuestionDescriptionLabel.text = surveyBottomCollection[indexPath.row].questionDescription 

    return cell 

} 

func dataInfo(survey: Survey) { 
print(survey.questionDescription) 

    surveyBottomCollection.append(survey) 
    self.reloadData() 
} 
+0

Tolga, was ich hier verstehe, dass Sie 'CollectionView' Cell in' UITableView' wiederverwenden müssen, aber ich denke nicht, dass es direkt wie oben erwähnt Code funktioniert. Sie müssen eine 'UITableView'-Zelle erstellen und in der Sammlungsansicht Daten zuweisen, die Sie in dieser Zelle haben möchten. – CodeChanger

+0

Ich habe bereits UITableView Cell erstellt, wie kann ich zuweisen? Kannst du mir ein einfaches Beispiel geben? Ich bin verwirrt. –

+0

lassen Sie mich Ihnen erklären, gibt es Ansichten, Sammlung und Tabelle in einem Controller. Ich möchte, wenn ich auf die Zelle der Tabellenansicht alle Informationen innerhalb klicken, um die Daten der Daten der Sammlungsansicht zu senden. –

Antwort

0

wie pro mein Wissen benötigen Sie UITableView benutzerdefinierte Zelle zu erstellen oder brauchen Zelle in storyboard erstellen und dann unter Code verwenden CollectionView Zellendaten in Ihre Tabelle Ansicht Zelle zu erhalten.

Und zur gleichen Zeit, während jeder Zelle auswählen tableview:didSelect anrufen und bei ausgewählter Funktion haben müssen Sie dieses Tableview Array-Objekt in einem anderen Array hinzuzufügen und das Array in Ihnen Collection Sichtzelle zu verwenden.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
      var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

      // Replace Beow line with your costume cell outlets 
      cell.textLabel?.text = self.items[indexPath.row] 

      //Like this Probably same like collection view or what ever you want to rename it in TableViewCell 
      cell.surveyQuestionNumberLabel.text = surveyBottomCollection[indexPath.row].questionNumber 
      cell.surveyQuestionDescriptionLabel.text = surveyBottomCollection[indexPath.row].questionDescription 

      return cell 
} 

Update:

// Use this method to get selected object and add it into new array. 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      // Add Your object with indexPath.row and reload your collectionView here 
     } 

Hoffnung Above-Code wird Ihnen helfen, das zu erreichen, was Sie wollen.

+0

Ok, ich habe bereits benutzerdefinierte Zellen für die Tabellenansicht und die Sammlungsansicht zugewiesen. Wie kann ich cell.surveyQuestionNumberLabel.text, cell.surveyQuestionDescriptionLabel.text in der Sammlungsansichtszelle anzeigen? Würde ich das klar erklären? –

+0

Wie Sie wissen, kann ich nicht segue dafür. Wegen eines Controllers. Ich denke Protokoll, Delegierter kann mir helfen, aber wie? –

+0

Wie Sie in demselben Bildschirm sind, brauchen Sie kein Delegiertenprotokoll. Was Sie brauchen, ist nur ein weiteres Array zu erstellen und dieses Array füllen, wenn Sie auf Tabellenansicht Zelle klicken und während Sie auf Zelle klicken, fügen Sie das ausgewählte Objekt in neues Array und laden Sie Ihre Sammlung Ansicht, die es ist. – CodeChanger

Verwandte Themen