2016-08-09 1 views
-4

У меня есть следующие отображаемые сцены. Я смущаюсь, какой тип иерархии элементов управления я должен предпринять, чтобы отобразить этот вид вида в xib.Как я могу отобразить иерархию следующих сцен в swift с помощью коллекцииView?

enter image description here

enter image description here

пожалуйста, дайте идеи, чтобы показать эти типы сцен. потому что мои товары идут динамически. Это не исправлено. поэтому, если бы я взял tableview для отображения первых элементов и его категорий, тогда где я должен отображать остальные элементы.

Edited

Я взял четыре секции. В 1-й секции коллекции и кнопки доставки. В 3-х нотах и ​​в 4-й аллергии & выписка. Во 2-й позиции моего заказа есть. но здесь у меня есть два уровня данных. Название позиции заказа, как курица kabab small, ... и т. д., и 2-й уровень - его дополнения, такие как простой nan, бутылка напитка и т. д. Здесь мои позиции заказа итерации в ячейке поскольку мои аддоны повторяются. Я взял имя заказа в ячейке. теперь, где я должен принимать элементы аддонов программно и как устанавливать размер каждой ячейки на основе всего ее содержимого внутри нее.

class cartVC: UIViewController ,UITableViewDataSource,UITableViewDelegate,UITextViewDelegate{ 

var tableData = ["al","dbd","gdge","kjdkas","al","dbd","gdge","kjdkas","al","dbd","gdge","kjdkas","al","dbd","gdge","kjdkas"] 


var mainview = UIView() 

@IBOutlet weak var cartTableView: UITableView! 

@IBAction func backBtn(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

func changeColor(sender:UISegmentedControl){ 

    switch(sender.selectedSegmentIndex){ 
    case 0: 
     print("collection clicked") 
    case 1: 
     print("delivery clicked") 

    default: 
     self.view.backgroundColor = UIColor.blueColor() 

    } 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 4 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    var rowcount = 0 
    if section == 0{ 
     rowcount = 0 
    } 
    if section == 1 { 
     rowcount = tableData.count 
    } 
    if section == 2{ 
     rowcount == 0 
    } 
    if section == 3{ 
     rowcount == 0 
    } 

    return rowcount 
} 

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 


    if section == 0{ 
     let headerView = UIView() 
     //set the frame 
     let frame = UIScreen.mainScreen().bounds 

     // headerView.frame = CGRectMake(0, 0, tableView.frame.size.width, 60) 
     headerView.frame = CGRectMake(frame.minX , frame.minY, frame.width, 60) 
     headerView.backgroundColor = UIColor.whiteColor() 

     //Initialize segment control 
     let items = ["Collection","Delivery"] 

     let customSC = UISegmentedControl(items: items) 
     customSC.selectedSegmentIndex = 0 


     //set the frame amd segmented control 
     customSC.frame = CGRectMake(frame.minX + 10, frame.minY + 5, frame.width - 20, 30) 

     // style the segmented control 
     customSC.layer.cornerRadius = 5.0 
     customSC.backgroundColor = UIColor.clearColor() 
     customSC.tintColor = UIColor.redColor() 
     //add target action method 
     customSC.addTarget(self, action: #selector(CartViewController.changeColor(_:)), forControlEvents: .ValueChanged) 
     //add subview 
     headerView.addSubview(customSC) 

     //Add label 
     let headinglbl = UILabel(frame: CGRect(x: frame.minX + 10, y: frame.minY + 40, width: tableView.frame.size.width, height: 20)) 
     headinglbl.text = "Your Order" 
     headinglbl.font = UIFont.boldSystemFontOfSize(17) 
     headinglbl.textColor = UIColor.blackColor() 
     headinglbl.textAlignment = .Center 
     headerView.addSubview(headinglbl) 

     mainview = headerView 

    } 

    if section == 2{ 
     let totalView = UIView() 
     totalView.frame = CGRectMake(0, 0, tableView.frame.size.width, 60) 
     totalView.backgroundColor = UIColor.clearColor() 

     //Add discount label 
     let discount = 14.5 
     let discountlbl = UILabel(frame: CGRectMake(10, 0, tableView.frame.size.width, 20)) 
     discountlbl.text = "Online Collection Discount(\(discount)%)" 
     discountlbl.font = UIFont.systemFontOfSize(14) 
     discountlbl.textColor = UIColor.darkGrayColor() 
     discountlbl.textAlignment = .Left 
     totalView.addSubview(discountlbl) 

     //Add discount price 

     let discountprice = UILabel(frame: CGRectMake(tableView.frame.size.width-60, 0, tableView.frame.size.width, 20)) 
     discountprice.text = "£ 1.27" 
     discountprice.font = UIFont.systemFontOfSize(14) 
     discountprice.textColor = UIColor.blackColor() 
     discountprice.textAlignment = .Left 
     totalView.addSubview(discountprice) 

     //Add label 
     let lbl = UILabel(frame: CGRectMake(10, 20, tableView.frame.size.width, 40)) 
     lbl.text = "Total" 
     lbl.font = UIFont.boldSystemFontOfSize(20) 
     lbl.textColor = UIColor.blackColor() 
     lbl.textAlignment = .Left 
     totalView.addSubview(lbl) 

     //calculate amount label 
     let totalAmountLbl = UILabel(frame: CGRectMake(totalView.frame.width-70, 20, totalView.frame.width, 40)) 
     totalAmountLbl.text = "£ 0.0" 
     totalAmountLbl.font = UIFont.boldSystemFontOfSize(20) 
     totalAmountLbl.textColor = UIColor.blackColor() 
     totalAmountLbl.textAlignment = .Left 
     totalView.addSubview(totalAmountLbl) 

     mainview = totalView 

    } 

    if section == 3{ 
     let footerView = UIView() 
     footerView.frame = CGRectMake(0, 0, tableView.frame.size.width, 200) 
     footerView.backgroundColor = UIColor.clearColor() 

     //Add note label 
     let notelbl = UILabel(frame: CGRectMake(10, 10, tableView.frame.size.width, 20)) 
     notelbl.text = "Leave a note" 
     notelbl.font = UIFont.boldSystemFontOfSize(17) 
     notelbl.textColor = UIColor.blackColor() 
     notelbl.textAlignment = .Left 
     footerView.addSubview(notelbl) 


     //Add a note textview 
     let noteTxt = UITextView() 
     noteTxt.frame = CGRectMake(10, 40, footerView.frame.width-20, 50) 
     noteTxt.backgroundColor = UIColor.lightGrayColor() 
     noteTxt.keyboardType = UIKeyboardType.Default 
     noteTxt.text = "e.g. Instructions about yout order" 
     noteTxt.textColor = UIColor.blackColor() 
     noteTxt.delegate = self 
     footerView.addSubview(noteTxt) 


     // Add allergy button 
     let allergyBtn = UIButton(type:.System) 
     allergyBtn.frame = CGRectMake(50, 100, 200, 20) 
     allergyBtn.setTitle("Do You have any allergy ?", forState: .Normal) 
     allergyBtn.setTitleColor(UIColor.redColor(), forState: .Normal) 
     allergyBtn.titleLabel?.font = UIFont(name: "", size: 10) 
     footerView.addSubview(allergyBtn) 

     // Add checkout button 
     let checkoutBtn = UIButton(type:.System) 
     checkoutBtn.frame = CGRectMake(100, 140, 100, 40) 
     checkoutBtn.setTitle("Check out", forState: .Normal) 
     checkoutBtn.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
     checkoutBtn.titleLabel?.font = UIFont(name: "", size: 10) 
     checkoutBtn.backgroundColor = UIColor.redColor() 
     checkoutBtn.layer.cornerRadius = 5 
     footerView.addSubview(checkoutBtn) 


     mainview = footerView 
    } 

    return mainview 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cartcell")! as! CartTableViewCell 


    cell.itemLabel.text = tableData[indexPath.row] 



    return cell 
} 

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    var heightCount:CGFloat = 0 
    if section == 0{ 
     heightCount = 60.0 

    } 
    if section == 2{ 
     heightCount = 60.0 

    } 
    if section == 3{ 
     heightCount = 200.0 

    } 
    return heightCount 
    } 

Мой customcell код

import UIKit 

class CartTableViewCell: UITableViewCell { 


let padding: CGFloat = 5 
var background: UIView! 
var itemLabel: UILabel! 
var priceLabel: UILabel! 
var deleteBtn:UIButton! 




override func awakeFromNib() { 
    super.awakeFromNib() 

    backgroundColor = UIColor.clearColor() 
    selectionStyle = .None 

    background = UIView(frame: CGRectZero) 
    background.alpha = 0.6 
    contentView.addSubview(background) 

    deleteBtn = UIButton(frame: CGRectZero) 
    deleteBtn.setImage(UIImage(named: "deleteBin.png"), forState: .Normal) 
    contentView.addSubview(deleteBtn) 

    itemLabel = UILabel(frame: CGRectZero) 
    itemLabel.textAlignment = .Left 
    itemLabel.textColor = UIColor.whiteColor() 
    contentView.addSubview(itemLabel) 

    priceLabel = UILabel(frame: CGRectZero) 
    priceLabel.textAlignment = .Center 
    priceLabel.textColor = UIColor.whiteColor() 
    contentView.addSubview(priceLabel) 

} 


override func layoutSubviews() { 
    super.layoutSubviews() 
    background.frame = CGRectMake(0, padding, frame.width, frame.height-2 * padding) 
    deleteBtn.frame = CGRectMake(padding, (frame.height - 25)/2, 40, 25) 
    priceLabel.frame = CGRectMake(frame.width-100, padding, 100, frame.height - 2 * padding) 
    itemLabel.frame = CGRectMake(CGRectGetMaxX(deleteBtn.frame) + 10, 0, frame.width - priceLabel.frame.width - CGRectGetMaxX(deleteBtn.frame) + 10, frame.height) 
} 

} 
+3

вид Стол с секциями. Вероятно, вы могли бы разместить свой пикап/доставку в первом и заказанные предметы в следующем разделе, а в своем последнем разделе вы можете включить плату. – GoodSp33d

+0

ok, но здесь, в разделе пунктов, упорядоченные элементы снова имеют свои подпункты, как вы можете видеть с помощью знака + и его повторения на основе выбора заказа. поэтому здесь, если я поместил элементы в ячейку во 2-й раздел, как вы сказали тогда, где я должен помещать подэлементы на основе count @ GoodSp33d –

+0

, я бы пошел с Collectionview, легче адаптироваться, чтобы выполнить разные потребности, а затем tableview. – Vaionixx

ответ

2

Как наши товарищи уже говорили об использовании TableView и секции, здесь мы будем следовать тем же way.Since это обширная тема, чтобы объяснить, я дам некоторый намек и, наконец, вы можете найти ссылку на демонстрационный проект.

  • Сначала добавьте TableView в раскадровке затем добавить коллекции, доставкой & Вашего заказа объектов как Tableview заголовка
  • Создать новый класс подкласс UITableviewcell с xib давайте назовем его Cell1. Теперь добавить удалить значок, основное блюдо этикетка и цена ярлык, для подзаголовков мы собираемся использовать другой UITableview.
  • Теперь создайте еще один UITableviewcell с именем xib как Cell2, подготовьте этот xib для подзаголовков и их цену.
  • В CELL1 numberOfSectionsInTableView возвращает количество основного блюда подсчета и numberOfRowsInSection возврата 1, Теперь загрузите имя всех основных блюд в их соответствующих лейбла
  • UPTO теперь имея некоторое количество секции (в зависимости от количества основных элементов) каждая секция имеет один UITableview.
  • Теперь мы должны изменить высоту ячейки таблицы динамически в зависимости от SubItems count.поэтому в heightForRowAtIndexPath я добавили следующие строки

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
        let subItems = tableContainer![indexPath.section].valueForKey("additional_items") as! NSArray 
        var defaultCellHeight:CGFloat = 37//Consider 37 as height of cell without subitems 
    
        //Following for loop keeps on increasing defaultCellHeight depending on available count 
        for _ in subItems { 
         defaultCellHeight += 37 
        } 
        return defaultCellHeight + 20 
    } 
    

    Поскольку трудно объяснить все глубоко я есть предоставить код для heightForRowAtIndexPath .WHILE смотрит в демо-проект, вы поймете все

ПРИМЕЧАНИЕ : Теперь мы загрузили все основные детали блюд, и мы предоставили достаточно места для предстоящих предметов.

  • В Cell1 класс добавить TableView делегат и источник данных в awakeFromNib, добавить все методы DataSource как required.set numberOfSectionsInTableView в и numberOfRowsInSection как граф пп

  • Вот именно мы загрузили tableview динамически согласно вашему требованию.

  • Теперь, наконец, добавить скидка, общей, оставить ноту & Checkout объектов в отдельном классе tableviewcell нагрузка он на последний индекс.

  • Или добавьте все те объекты внутри UIView и добавьте его как Main tableview's нижний колонтитул.

Примечание: Приведенные выше советы предназначены только для справки, для лучшего разъяснения концепции я добавил demo project's github repo.

РЕЗУЛЬТАТ:

enter image description hereenter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^