2016-07-08 25 views
0

ich tableViewCell eine ViewController von einem benutzerdefinierten instanziiert möchten (entsprechend UICollectionViewDelegate,UICollectionDatasource) Klasse, die einen benutzerdefinierten Collection in it.The segue eingebettet hat muss ausgeführt werden, wenn ein bestimmter Abschnitt der CollectionView ausgewählt ist. Bereits mit Protokollen versucht funktioniert nicht!Wie ein Viewcontroller aus einer didSelectItemAtIndexPath eines benutzerdefinierten CollectionViewController instanziiert, die ein Teil eines tableViewCell ist

my custom TableView class :- 
    import UIKit 


protocol transferDelegate{ 

func transfer(_: Int) 

} 


class ParentTableViewCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource{ 



@IBOutlet weak var parentCellHeader: UIView! 

@IBOutlet weak var feedPostUsername: UILabel! 

@IBOutlet weak var feedPostUserDetails: UILabel! 

@IBOutlet weak var feedPostDescription: UILabel! 

@IBOutlet weak var feedPicturesCollectionView: UICollectionView! 

@IBOutlet weak var feedUserProfilePictures: CustomProfilepicture! 



var transferingDelegate : transferDelegate? 

override func awakeFromNib() { 


    super.awakeFromNib() 

    feedPicturesCollectionView.dataSource = self 
    feedPicturesCollectionView.delegate = self 
    feedPicturesCollectionView.pagingEnabled = true 
    feedPicturesCollectionView.backgroundColor = UIColor.clearColor() 

} 




override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 

} 




required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

} 




func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 

    return 1 

} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return 10 

} 

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

    let cell = feedPicturesCollectionView.dequeueReusableCellWithReuseIdentifier("FeedPicturesCell", forIndexPath: indexPath) as! FeedPhotosCell 



    switch(indexPath.row){ 

    case 0 : cell.feedImages.image = UIImage(named: "defaultProfilePic") 

    case 1 : cell.feedImages.image = UIImage(named: "image1") 

    case 2 : cell.feedImages.image = UIImage(named: "image2") 

    case 3 : cell.feedImages.image = UIImage(named: "image3") 


    default : cell.feedImages.image = UIImage(named: "defaultProfilePic") 

     } 

     return cell 


} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    print(indexPath.row) 

    transferingDelegate?.transfer(indexPath.row) 


} 


} 

meine Viewcontroller Klasse: -

import UIKit 

class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource,transferDelegate{ 

var xibName : String = "HomepageFeedCellHeader" 


var lords : [String] = ["name1","name2","name3"] 

var que : [String] = ["--","red","blue"] 

var desc : [String] = ["abcE","defn","ghi"] 

var menProfilePictures : [UIImage] = [UIImage(named: "image1")!,UIImage(named: "image2")!,UIImage(named: "image3")!] 

@IBOutlet weak var parentTableView: UITableView! 


var a : ParentTableViewCell = ParentTableViewCell() 






override func viewDidLoad() { 

    super.viewDidLoad() 



    parentTableView.delegate = self 
    parentTableView.dataSource = self 

    // Do any additional setup after loading the view, typically from a nib. 
} 


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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = parentTableView.dequeueReusableCellWithIdentifier("ParentCell", forIndexPath: indexPath) as! ParentTableViewCell 
    a.transferingDelegate = self 
    cell.feedPostUsername.text = lords[indexPath.row] 
    cell.feedPostUserDetails.text = queens[indexPath.row] 
    cell.feedPostDescription.text = desc[indexPath.row] 
    cell.feedUserProfilePictures.image = menProfilePictures[indexPath.row] 

    return cell 
} 

func transfer(itemNo : Int) { 

    print("call recieved in viewController from item \(itemNo)") 

} 



} 
+0

Mit th Verwendung von 'NSNotificationCenter'. –

+1

Was ist "a.transferDelegate = self" ?, muss es "cell.transferDelegate = self" sein. –

+0

@BhumitMehta Ich bin neu dazu, können Sie bitte erarbeiten! – Dravidian

Antwort

2

Ihr didSelectItemAtIndexPath Problem gelöst ist. Dies ist die Antwort auf Ihre zweite Ausgabe, die Sie im Kommentar erwähnt haben. Sie können das Bild nicht der imageView zuweisen, wenn es nicht in der Hierarchie navigation ist. Ihr Problem ist, dass Sie detailImage ist Null, weil diese ViewController nicht in der Fensterhierarchie geladen ist. Zu lösen Ihr Problem zu tun wie diese

imagePopOverScene?.selImage = menProfilePictures[itemNo] 

erklären nun selImage in Ihrem imagePopOverScene wie diese

var selImage: UIImage! 

Auch follwing Zeile in viewDidLoad von imagePopOverSceneVC

self.detailImage.image = self.selImage 

Dieses Add lösen Ihr Problem

+0

Danke, du bist ein Lebensretter! .... – Dravidian