2017-06-12 7 views
1

は、誰もが、私はScrollViewのUITableViewとUICollectionViewは - スウィフト

を使用

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

下のスクリーンショットのようなUIを作成するために、私のアイデアを提案することができます

  • ImageViewの
  • Lable
  • テーブルビュー
    • Lable
    • ボタン
  • のUIView
  • CollectionView
    • ImageViewの
    • ボタン
    • ラベル...

これを使用してスクロールダウンしようとすると、UIScrollViewだけがUICollectionViewではなくスクロールします。 また、コンテンツの高さにUiCollectionViewの高さを与え、それに合わせてスクロールビューの高さを上げようとしました。これを行った後、コレクションビューのデータソースとデリゲートメソッドは、スクロールするときに呼び出されません(viewDidLoad - コレクションビューのセルを読み込む最初のことを意味します)。下のシーン例では、データソースとデリゲートメソッドは最初の2つのセルはスクロールせずに画面に表示されるため、他のセルはスクロールせずに表示されるためです。

私はtableviewで試してみたいと思っていますが、どうすればいいのか分かりません。

  1. バナー画像は、すべてのカテゴリでないかもしれないです最初のコンテンツので、「より多くのラベル探検
  2. は静的lable
  3. 第三のものである(それはJSONレスポンスであってもよいし、できない場合があります) (セル数はカテゴリに応じて異なる場合があります)
  4. は、フィルタとソートボタンとその静的なボタンを持つUiviewです
  5. 最後はコレクションビューのセルです(細胞数はカテゴリーによって異なる場合があります)

ですから、私にアイ​​デアやサンプル、またはサンプルコードをお待ちしております...ありがとうございました。

+0

あなたはあなたができる、スクロールビューを使用するだけで、テーブルビューと内部のテーブルビューを使用する必要はありませんリストラインの布などの2種類のセルを使用し、そのセル内にコレクションビューを含む別のタイプのセルを使用します。ヘッダー上のイメージには、セクションのビューが最適ないくつかのオプションがあります。 – dip

+0

提案していただきありがとうございます..あなたはtableviewcellの中にuicollectionviewを含むサンプルをいくつか共有していただけますか –

+0

https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/ここにリンクがあります。同じ方法。 – dip

答えて

1

は、最後に私は、すべてのテーブルビュー内に維持アイデア、

  1. 最初の2つ(バナー画像と探索lableある私のテーブルビューの最初のセル)

  2. を見つけました
  3. 2番目のPrototypeCellはカテゴリです(タイトル、布、バッグ、ベルト)

  4. 第3プロトタイプのセルは、フィルタとソートボタンを使って、このセルをセクションとして使用しました。ヘッダビュー

  5. 最後に、最後のプロトタイプセルはコレクションビューとそのセルを持っています(私はそれを設計してセルに追加します)

とサンプルコードは次のようである、

マイ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 
} 

} 

マイ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 
} 

} 

そして最後に私の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)") 
} 

マイストーリーボードのスクリーンショットのようになります追加 https://drive.google.com/file/d/0B2JNfyRRcL0GYjJsckpyaGpoMkE/view?usp=sharing

関連する問題