2017-06-12 6 views
1

Kann jemand eine Idee vorschlagen mir eine UI wie der Screenshot untenUITableView und UICollectionView innerhalb UIScrollView - Swift

https://drive.google.com/open?id=0B2JNfyRRcL0Gb2huQ3ZTV2N6Q1E

I

Scroll

    zum Erstellen
  • Imageview
  • Etikett
  • Tableview
    • Lable
    • Knopf
  • uiview
  • Collection
    • Image
    • Knopf
    • Etiketten ...

mit diesem wenn ich versuche, nach unten zu scrollen, ist nur die UIScrollView Scrolling nicht die UICollectionView. I Versucht auch, die Höhe von UiCollectionView der Höhe seines Inhalts anzupassen und die Größe der Bildlaufleiste so anzupassen, dass sie in die Höhe passt. Sobald ich dies getan habe, rufen die Datenquellen- und Delegate-Methoden der Sammlungsansicht nicht auf, wenn ich scrollte (bedeutet das erste Mal, wenn viewDidLoad - es lädt die Sammlungsansichtszelle) mit dem unten gezeigten Beispiel werden die Datenquellen- und Delegate-Methoden nur für die aufgerufen erste zwei Zellen, da es auf dem Bildschirm ohne Scrollen sichtbar ist, während die anderen nicht sind.

Ich denke, es mit Tableview versuchen, aber ich weiß nicht, wie .... weil

  1. der erste Inhalt, die das Banner Bild möglicherweise nicht in allen Kategorien (es in JSon Antwort sein kann oder möglicherweise nicht)
  2. Je mehr Label Explore ist statisch Label
  3. Die dritte Sache „ Kleidung, Taschen, Gürtel und Geldbörsen "sind die Tabellenansicht Zellen ansehen (die Zellenanzahl kann je nach Kategorie unterschiedlich sein)
  4. Die vierte ist eine Uiview, die die Filter- und Sortierschaltflächen hat und eine statische
  5. die letzte ist eine CollectionView Zellen (Die Anzahl der Zellen kann je nach Kategorie variieren.)

Also, bitte schlagen Sie mir eine Idee oder ein Beispiel oder ein Beispiel-Code sind sehr zu begrüßen ... .. danke im Voraus ....!

+0

Sie brauchen keine Scroll-Ansicht zu verwenden, nur Tabellenansicht und innen Tabellenansicht verwenden, können Sie Verwenden Sie zwei Arten von Zellen, eine für Listline-Tücher und so weiter und verwenden Sie einen anderen Typ von Zelle, die Sammlungsansicht innerhalb dieser Zelle enthält, ohh und für Bild auf Header haben Sie mehrere Optionen, unter denen die Ansicht für Abschnitt am besten wäre. – dip

+0

Vielen Dank für Ihre Anregung .. Könnten Sie bitte ein Beispiel teilen, um eine uicollectionview in einem Tableviewcell enthalten –

+0

https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/ Hier ist ein Link Go genau auf gleicher Weg. – dip

Antwort

1

Schließlich fand ich eine Idee,

ich alle in einem Tableview gehalten,

  1. Die ersten beiden (das Banner Bild und das Label erforschen sind die erste Zelle meines Tableview)

  2. Die zweite PrototypeCell ist die Kategorie Titel (wo die Tücher, Taschen und Gürtel)

  3. Die dritte Prototyp Zelle ist was Mit den Filter- und Sortierbuttons habe ich diese Zelle als Sektion verwendet. Kopfzeile Ansicht

  4. Und schließlich ist die letzte Prototypzelle eine, die die Sammlung View und ihre Zelle hat (ich entwerfe sie einfach und füge sie in eine Zelle ein)

Und Codebeispiel ist wie folgt,

Mein CollectionViewCell

import UIKit 

class CollectionViewCell: UICollectionViewCell { 

@IBOutlet weak var imgFav: UIImageView! 
@IBOutlet weak var title: UILabel! 
@IBOutlet weak var pinImage: UIImageView! 
@IBOutlet weak var priceLbl: UILabel! 
@IBOutlet var splPriceLbl: UILabel! 

@IBOutlet weak var addToFav: UIButton! 

override func awakeFromNib() 
{ 
    super.awakeFromNib() 
    self.contentView.autoresizingMask = [UIViewAutoresizing.flexibleRightMargin, UIViewAutoresizing.flexibleLeftMargin, UIViewAutoresizing.flexibleBottomMargin, UIViewAutoresizing.flexibleTopMargin] 
    self.contentView.translatesAutoresizingMaskIntoConstraints = true 
} 

} 

Mein TableViewCell

import UIKit 

class SubCategoryTableViewCell: UITableViewCell { 

@IBOutlet weak var productListCollectVw: UICollectionView! 
@IBOutlet weak var btnSort: UIButton! 
@IBOutlet weak var btnFilter: UIButton! 
@IBOutlet weak var subCategryTitle: UILabel! 
@IBOutlet weak var lblExplore: UILabel! 
@IBOutlet weak var imgBanner: UIImageView! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 

Und schließlich meine Viewcontroller

@IBOutlet weak var mainTableView: UITableView! 
var subCategoryAry2 = NSMutableArray() 
var imageUrl:URL! 
var imageUrlStr:String = "" 
var productListAry:NSMutableArray = [] 

func numberOfSections(in tableView: UITableView) -> Int 
{ 
return 2 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if section == 0 
    { 
     return subCategoryAry2.count + 1 
    } 
else 
{ 
    return 1 
} 

} 

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
{ 
if section == 0 
{ 
    return nil 
} 
else 
{ 
    let CellIdentifier: String = "section2Cell" 
    let headerView: SubCategoryTableViewCell? = tableView.dequeueReusableCell(withIdentifier: CellIdentifier) as! SubCategoryTableViewCell? 

    headerView?.btnFilter.addTarget(self, action: #selector(self.filterAction(_:)), for: .touchUpInside) 

    headerView?.btnSort.addTarget(self, action: #selector(self.sortAction(_:)), for: .touchUpInside) 


    if headerView == nil 
    { 
     print("No cells with matching CellIdentifier loaded from your storyboard") 
    } 
    return headerView! 
} 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
if indexPath.section == 0 
{ 
    if indexPath.row == 0 
    { 
     let cell:SubCategoryTableViewCell = self.mainTableView.dequeueReusableCell(withIdentifier: "bannerCell") as! SubCategoryTableViewCell! 

     if self.imageUrlStr == "no_image.png" || self.imageUrlStr == "" 
     { 
      cell.imgBanner.isHidden = true 
      cell.imgBanner.frame.size.height = 0 
      cell.lblExplore.frame.origin.y = 0 
     } 
     else 
     { 
      cell.imgBanner.isHidden = false 

      let imageUrl1 = "\(self.imageUrl!)" 

      let trimmedUrl = imageUrl1.trimmingCharacters(in: CharacterSet(charactersIn: "")).replacingOccurrences(of: " ", with: "%20") as String 

      cell.imgBanner.sd_setImage(with: URL(string: trimmedUrl), completed: { (image, error, imageCacheType, imageUrl) in 

       if image != nil 
       { 

       } 
       else 
       { 
        cell.imgBanner.isHidden = true 
        cell.imgBanner.frame.size.height = 0 
        cell.lblExplore.frame.origin.y = 0 
       } 
      }) 
     } 

     return cell 
    } 
    else //if indexPath.row == 1 
    { 
     let cell:SubCategoryTableViewCell = self.mainTableView.dequeueReusableCell(withIdentifier: "listCell") as! SubCategoryTableViewCell! 

     cell.subCategryTitle.text = (subCategoryAry2.object(at: (indexPath as NSIndexPath).row - 1) as AnyObject).value(forKey: "name") as? String 

     return cell 
    } 
} 
else 
{ 
    let cell:SubCategoryTableViewCell = (self.mainTableView.dequeueReusableCell(withIdentifier: "collectionCell") as? SubCategoryTableViewCell!)! 

    // Load Your CollectionView 

    cell.productListCollectVw.dataSource = self 
    cell.productListCollectVw.delegate = self 
    cell.productListCollectVw.reloadData() 

    return cell 
} 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
if indexPath.section == 0 
{ 
    if indexPath.row != 0 
    { 
     //***************** Do whatever you need to do if user did selected the row but remain the indexpath.row or indexpath.row - 1 *****************// 

     subCategoryID = ((subCategoryAry2.object(at: (indexPath as NSIndexPath).row - 1) as! NSObject).value(forKey: "category_id") as? String)! as NSString 

     print("tableView - didSelectRowAt \(indexPath.row)") 

    } 
} 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
if indexPath.section == 0 
{ 
    var height = CGFloat() 

    if indexPath.row == 0 
    { 
     if self.imageUrlStr == "no_image.png" || self.imageUrlStr == "" 
     { 
      //***************** Reduce banner image height if it is nil *****************// 
      height = 38 
     } 
     else 
     { 
      height = 175 + 38 
     } 
    } 
    else 
    { 
     height = 44 
    } 
    return height 
} 
else 
{ 
    let height = (255 * self.productListAry.count/2) + (2 * (self.productListAry.count) + 4) 
    //***************** increase height as per your need *****************// 

    return CGFloat(height) 
} 
} 


func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
{ 
if section == 0 
{ 
    return 0 
} 
else 
{ 
    return 44 
} 
} 


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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
{ 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.reuseIdentifier, for: indexPath) as! CollectionViewCell 
cell.title.text = (self.productListAry.object(at: (indexPath as NSIndexPath).row) as! NSDictionary).value(forKey: "name") as? String 

//***************** Load your cell as per your need *****************// 

return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
{ 

print("didSelectItemAt \(indexPath.row)") 
} 

My Storyboard wird wie in folgendem Screenshot hinzugefügt https://drive.google.com/file/d/0B2JNfyRRcL0GYjJsckpyaGpoMkE/view?usp=sharing

Verwandte Themen