点击时,TableView行消失

时间:2017-01-25 13:05:05

标签: swift uitableview swift3 icarousel

我在iCarousel项目中嵌入了一个表格视图,首先我似乎无法设置视图框架是否在viewDidLayoutSubviews()中,而且当我点击Tableview时所有细胞都消失了。我在自己的ViewController中创建了Tableview,因为每个轮播项目都需要为它们包含的Tableviews编辑按钮。如果我没有将Tableview放在它自己的视图控制器中,则单元格仍然存在但是当滚动大量视图时我得到的索引超出范围而我无法添加编辑按钮。我已经没有想法,并且会喜欢一些指示或提示。

class BillSplitterTableView: UIViewController, UITableViewDataSource, UITableViewDelegate {

        var splitter: BillSplitter?
        var tableView: UITableView!
        var viewFrame: CGRect?

        init(frame: CGRect, splitter: BillSplitter) {
            super.init(nibName: nil, bundle: nil)

            self.splitter = splitter
            self.viewFrame = frame
        }
        required init(coder aDecoder: NSCoder) {
            fatalError("init(coder:)")
        }

        override func viewDidLoad() {
            super.viewDidLoad()

            let subView = UIView(frame: viewFrame!)

            view.backgroundColor = .clear

            tableView = UITableView(frame: view.frame)
            tableView.delegate = self
            tableView.dataSource = self
            tableView.frame = subView.frame
            tableView.separatorStyle = .none
            tableView.estimatedRowHeight = 35

            let tableViewBackground = UIImageView(image: UIImage(data: splitter?.image as! Data, scale:1.0))
            tableViewBackground.contentMode = .scaleAspectFit
            tableViewBackground.frame = tableView.frame

            tableView.backgroundView = tableViewBackground

            subView.addSubview(tableView)
            view.addSubview(subView)
        }

        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return UITableViewAutomaticDimension
        }

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if (splitter?.items?.count)! > 0 {
                return (splitter!.items?.count)!
            } else {
                TableViewHelper.EmptyMessage("\(splitter?.name!) has no items to pay for.", tableView: tableView)
                return 0
            }
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            tableView.register(SplitterCarouselItemTableViewCell.classForCoder(), forCellReuseIdentifier: "splitterCarouselItemTableViewCell")
            let cell: SplitterCarouselItemTableViewCell = tableView.dequeueReusableCell(withIdentifier: "splitterCarouselItemTableViewCell") as! SplitterCarouselItemTableViewCell
            let item = (splitter?.items?.allObjects as! [Item])[indexPath.row]
            let count = item.billSplitters?.count

            cell.backgroundColor = UIColor(netHex: 0xe9edef).withAlphaComponent(0.5)

            if count! > 1 {
                cell.name!.text = "\(item.name!)\nsplit \(count!) ways"
                cell.price!.text = "£\(Double(item.price)/Double(count!))"

            } else {
                cell.name!.text = item.name!
                cell.price!.text = "£\(item.price)"
            }
            return cell
        }
    }

carousel viewcontroller:

 func numberOfItems(in carousel: iCarousel) -> Int {
    return allBillSplitters.count
}


func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {

    let splitter = allBillSplitters[index]

    carouselIndex = index

    let splitterView = SplitterCarouselItemView(frame: CGRect(x: 0, y: 0, width: width, height: height))
    let viewWidth = Int(splitterView.frame.width)

    let nameLabel = SplitterCarouselItemNameLabel(frame: CGRect(x: 0, y: 0, width: viewWidth, height: 30))
    let emailLabel = SplitterCarouselItemEmailLabel(frame: CGRect(x: 0, y: 30, width: viewWidth, height: 20))
    let addItemButton = SplitterCarouselItemButton(frame: CGRect(x: viewWidth - 45, y: 50, width: 35, height: 35), addsItem: true)
    let deleteItemButton = SplitterCarouselItemButton(frame: CGRect(x: 15, y: 50, width: 35, height: 35), addsItem: false)

    let itemHeight = Int(splitterView.frame.height)
    let payTotalButton = SplitterCarouselItemPayButton(frame: CGRect(x: 0, y: itemHeight - 35, width: viewWidth + 1, height: 35))

    let tableViewHeight = Int(height - 130)
    let frame = CGRect(x: 0, y: 85, width: viewWidth, height: tableViewHeight)

    let tableView = BillSplitterTableView(frame: frame, splitter: splitter)

    splitterView.addSubview(nameLabel)
    splitterView.addSubview(emailLabel)
    splitterView.addSubview(addItemButton)
    splitterView.addSubview(deleteItemButton)
    splitterView.addSubview(tableView.view)
    splitterView.addSubview(payTotalButton)

    nameLabel.text = "\(allBillSplitters[index].name!)"
    emailLabel.text = "\(allBillSplitters[index].email!)"
    payTotalButton.setTitle("Pay £\(allBillSplitters[index].total)", for: .normal)

    return splitterView
}

func carousel(_ carousel: iCarousel, valueFor option: iCarouselOption, withDefault value: CGFloat) -> CGFloat {
    if allBillSplitters.count > 2 {
        switch option {
        case .spacing:
            return value * 1.05
        case .fadeMin:
            return 0.0
        case .fadeMinAlpha:
            return 0.3
        case .fadeMax:
            return 0.0
        default:
            return value
        }
    }
    return value
}

感谢您提前提供任何帮助

0 个答案:

没有答案