2017-04-19 3 views
1

Ich habe ein UITablaView in UITableviewCell. Hier ist mein Code:TableView in TableviewCell zeigt keine Zellen an

UITableViewCell:

class ProductViewCell: UITableViewCell { 

@IBOutlet weak var totalOrderButton: UIButton! 
@IBOutlet weak var productImage: UIImageView! 
@IBOutlet weak var productNameLabel: UILabel! 
@IBOutlet weak var productSubNameLabel: UILabel! 
@IBOutlet weak var productBioLabel: UILabel! 
@IBOutlet weak var mlButton: UIButton! 
@IBOutlet weak var productQuantity: UILabel! 
@IBOutlet weak var plusButton: UIButton! 
@IBOutlet weak var minusButton: UIButton! 
@IBOutlet weak var greenHeartButton: UIButton! 
@IBOutlet weak var liquorsTableView: UITableView! 

var fourLiquorStores: [LiquorStore] = [] 

var currentUser: User! 

var currentProduct: Product! { 
    didSet { 
     updateUI() 
    } 
} 

func updateUI() { 
    downloadProductImage() 
    productNameLabel.text = currentProduct.name 
    productSubNameLabel.text = currentProduct.subName 
    productBioLabel.text = currentProduct.description 
    productQuantity.text = "\(currentProduct.quantity)" 
    updateGreenHeart() 

} 
var cache = SAMCache.shared() 
weak var delegate: ProductViewCellDelegate! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    liquorsTableView.estimatedRowHeight = 65 
    liquorsTableView.rowHeight = 65 
    liquorsTableView.delegate = self 
    liquorsTableView.dataSource = self 
    fetchLiquorStores() 
} 

func fetchLiquorStores() { 
     LiquorStore.observeNewLiquorStore { (liquorStore) in 
     LiquorStore.observeNewLiquorStore { (liquorStore) in 
      if !self.fourLiquorStores.contains(liquorStore) { 
       self.fourLiquorStores.append(liquorStore) 
       self.delegate.updateTableView() 
       print(self.fourLiquorStores) 
      } 
     } 
    } 
} 




func downloadProductImage() { 
    let productuid = currentProduct.uid 
    let profileImageKey = "\(productuid)" 

    if let image = cache?.object(forKey: profileImageKey) as? UIImage { 
     productImage.image = image 
    } else { 
    currentProduct.downloadPopularProductImage { [weak self] (image, error) in 
     if let error = error { 
      print(error.localizedDescription) 
     } else { 
      self?.productImage.image = image 
      self?.cache?.setObject(image, forKey: profileImageKey) 
     } 
    } 
    } 
} 


// Ad o delete Quantities 
@IBAction func plusDidTap() { 
    if currentProduct.quantity >= 1 && currentProduct.quantity <= 60 { 
     currentProduct.quantity += 1 
     delegate.updateTableView() 

    } 
} 

@IBAction func minusDidTap() { 
    if currentProduct.quantity > 1 { 
     currentProduct.quantity -= 1 
     delegate.updateTableView() 
    } 
} 


func updateGreenHeart() { 
    if let currentUser = currentUser { 
     if currentUser.favoriteProducts.contains(currentProduct) { 
      greenHeartButton.setImage(#imageLiteral(resourceName: "GreenHeartFilled"), for: []) 
     } else { 
      greenHeartButton.setImage(#imageLiteral(resourceName: "GreenHeart"), for: []) 
     } 
    } 
} 

// Ad or delete Favorite Products 
@IBAction func greenHeartDidTap() { 
    if currentUser.favoriteProducts.contains(currentProduct) { 
     self.greenHeartButton.setImage(#imageLiteral(resourceName: "GreenHeart"), for: []) 
     self.currentUser.deleteFavoriteProduct(product: currentProduct) 
    } else { 
     self.greenHeartButton.setImage(#imageLiteral(resourceName: "GreenHeartFilled"), for: []) 
     self.currentUser.addFavoriteProduct(product: currentProduct) 

    } 
} 

}

extension ProductViewCell: UITableViewDataSource, UITableViewDelegate { 


func numberOfSections(in tableView: UITableView) -> Int { 
    return fourLiquorStores.count 
} 

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = liquorsTableView.dequeueReusableCell(withIdentifier: "LiquorStoreViewCell", for: indexPath) as! LiquorStoresViewCell 
    cell.currentProduct = self.currentProduct 
    cell.liquorStore = self.fourLiquorStores[indexPath.section] 

    return cell 
} 

}

UITablViewCell -2:

class LiquorStoresViewCell: UITableViewCell { 

@IBOutlet weak var liquorStoreNameLabel: UILabel! 
@IBOutlet weak var liquorStorePriceLabel: UILabel! 
@IBOutlet weak var liquorStoreTimeLabel: UILabel! 
@IBOutlet weak var starStackView: UIStackView! 
@IBOutlet weak var imageViewBoard: UIImageView! 

var currentProduct: Product! 
var currentPriceIndex: Int = 0 

var liquorStore: LiquorStore! { 
    didSet { 
     updateUI() 
    } 
} 



func updateUI() { 
changeLiquorStoreProductsUid() 
liquorStoreNameLabel.text = liquorStore.userName 
let index = liquorStore.products.index(of: currentProduct) 
    if let index = index { 
     let productPrice = liquorStore.products[index].price[currentPriceIndex] 
     format(price: productPrice) 
    } 
} 



// Format Product Price to Currency 
func format(price: Double) { 
    let formatter = NumberFormatter() 
    formatter.locale = Locale.current // Change this to another locale if you want to force a specific locale, otherwise this is redundant as the current locale is the default already 
    formatter.numberStyle = .currency 
    if let formattedTipAmount = formatter.string(from: price as NSNumber) { 
     liquorStorePriceLabel.text = "Tip Amount: \(formattedTipAmount)" 
    } 
} 

// Func to organize LiquorStores 
func changeLiquorStoreProductsUid() { 
    for product in liquorStore.products { 
     if self.currentProduct.name == product.name && self.currentProduct.description == product.description && self.currentProduct.subName == product.subName { 
      let index = liquorStore.products.index(of: product) 
      if let index = index { 
       liquorStore.products[index].uid = currentProduct.uid 
      } 
     } 
    } 
} 



override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
    liquorStorePriceLabel.textColor = UIColor.white 
    liquorStoreNameLabel.textColor = UIColor.white 
    liquorStoreTimeLabel.textColor = UIColor.white 
    imageViewBoard.backgroundColor = #colorLiteral(red: 0.5239839702, green: 0.5239839702, blue: 0.5239839702, alpha: 1) 
    for view in starStackView.subviews { 
     let image = view as! UIImageView 
     image.image = #imageLiteral(resourceName: "WhiteStar") 
    } 

} 

}

Die UITableView in der UITableviewCell zeigt die Daten nicht:/ Was ist das Problem?

Dies ist, was ich bin Gebäude: StoryBoard

Eine dieser im Simulator angezeigt wird, wie Sie die zweite Tableview leer sehen können, ist:

Simulator

PD: Ich bin Laden Sie die LiquorStores erfolgreich von Firebase herunter.

+0

Gibt es einen Screenshot? Ich sehe keinen. – NRitH

+0

Mögliches Duplikat von http://stackoverflow.com/questions/32586716/tableviewdatasource-and-delegate-not-called-when-tableview-is-inside-collectionv – Luzo

+0

Mögliches Duplikat von [TableViewDatasource und delegate nicht aufgerufen, wenn tableview in collectionview ist Zelle] (http://stackoverflow.com/questions/32586716/tableviewdatasource-and-delegate-not-called-when-tableview-is-inside-collectionv) – Luzo

Antwort

0

Während es möglich ist zu tun, was Sie zu tun versuchen, wäre es viel einfacher Ihre Architektur völlig neu zu überdenken. Wenn Ihr View-Controller nur ein einzelnes Produkt plus eine Liste von Spirituosen-Stores anzeigt, sollte die Produktansicht nicht wirklich in einer Zelle sein - machen Sie es einfach zu einer gewöhnlichen Ansicht und machen Sie diese Ansicht zu Ihrer Tabellen-Kopfzeile. Die Zellen sind dann die Likörspeicher, und Sie müssen sich nicht länger damit beschäftigen, einen Tisch in einer Zelle zu verschachteln. Alternativ können Sie halten die Produktansicht in einer Zelle, aber fügen Sie einfach Prototypen für die Spirituosengeschäfte als eine zweite Art von Zelle in der gleichen Tabelle.

EDIT: Jetzt, wo Sie Ihre Storyboard-Screenshot veröffentlicht haben, ist die einfachste Sache für Sie zu tun, Ihre Schnapsladen-Prototyp-Zelle auf die oberste Ebene Tabelle zu verschieben, entfernen Sie die Untertabelle aus der obersten Zelle in Ihrer Datenquelle, haben

func tableView(_ tableView: UITableView, cellForRowAtIndexPath path: NSIndexPath) -> UITableViewCell { 
    if path.row == 0 { 
     return tableView.dequeueCellWithIdentifier("productDetailsCell")! 
    } else { 
     return tableView.dequeueCellWithIdentifier("liquorStoreCell")! 
    } 
} 
+0

Großartig !! Das brauche ich, vielen Dank !! –

+0

Froh, dass es geholfen hat! – NRitH

Verwandte Themen