Как я могу изменить zPosition заголовка раздела tableView?

У меня есть tableView, когда я вызываю viewForHeaderInSection, прежде чем вернуть ячейку. У меня есть этот код:

headerCell.layer.zPosition = headerCell.layer.zPosition-1 

Теперь это работает в том смысле, что ячейки прокручиваются над заголовком раздела, который мне нужен. Но в ячейке есть 3 кнопки в нижней части фрейма, когда эти кнопки прокручиваются (или, я должен сказать, под) представлением содержимого заголовка разделов, представление блокирует кнопки, и я больше не могу нажимать кнопки, хотя я все еще могу видеть их, это потому, что представление содержимого ячеек отображается поверх представления заголовков.

Если я перехожу к иерархии представлений, представление содержимого заголовка находится над представлением ячейки, которое виновато в блокировке действий кнопок.

У кого-нибудь есть работа? или знаете, как изменить Zposition headerCell, чтобы он находился за кнопкой? Я пробовал так много вещей, но мне нужна помощь.

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if (cellIdentifier == "vivrCell") {
        println(screenSize.width)
        if (screenSize.width < 370) {
            return 180
        }else{
            return 220
        }
    }else {
        return 0.0
    }
}

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if (cellIdentifier == "vivrCell") {
        let headerCell = mainTable.dequeueReusableCellWithIdentifier("vivrHeaderCell") as vivrHeaderCell
        headerCell.productID = self.feedReviewResults![section]["product"]["id"].stringValue
        headerCell.cellDelegate = self
        headerCell.clipsToBounds = false
        headerCell.layer.zPosition = headerCell.layer.zPosition-1
        return headerCell
    }
    return nil
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    switch cellIdentifier {
        case "vivrCell":
            return self.feedReviewResults?.count ?? 0
        case "newCell":
            return 1
    default:
        return 1

    }
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return 1
}


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

    switch cellIdentifier{
        case "buzzCell":
            var buzzcell = mainTable.dequeueReusableCellWithIdentifier(cellIdentifier) as buzzCell
            return buzzcell
        case "vivrCell":
            var vivrcell = mainTable.dequeueReusableCellWithIdentifier(cellIdentifier) as vivrCell
            vivrcell.review = self.feedReviewResults![indexPath.section]
            vivrcell.reviewID = self.feedReviewResults![indexPath.section]["id"].stringValue
            if let state = self.feedReviewResults![indexPath.section]["current_helpful"].boolValue as Bool?{
                vivrcell.helpfullState = state
            }
            vivrcell.wishlistState = true 
            vivrcell.cellDelegate = self
            vivrcell.layer.zPosition = vivrcell.layer.zPosition
            vivrcell.backgroundView = nil
            vivrcell.contentView.backgroundColor = UIColor.clearColor()
            return vivrcell
        default:
            let noNewProductsView = UIView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height))
            noNewProductsView.backgroundColor = UIColor.whiteColor()
            let checkBackLabel = UILabel(frame: CGRectMake(0, 0, 200, 60.0))
            checkBackLabel.numberOfLines = 3
            checkBackLabel.textAlignment = NSTextAlignment.Center
            checkBackLabel.center = CGPointMake(self.view.center.x, self.view.center.y-100)
            checkBackLabel.text = "Check back for new products!"
            noNewProductsView.addSubview(checkBackLabel)
            var newcell = mainTable.dequeueReusableCellWithIdentifier(cellIdentifier) as newCell
            newcell.contentView.addSubview(noNewProductsView)
            return newcell

    }
}

person Maxwell Bo Blessen    schedule 13.05.2015    source источник
comment
Вчера я задал аналогичный вопрос, я дал ссылку на пост с довольно многими ответами. Возможно, это будет вам полезно: stackoverflow.com/questions/30203010/   -  person Dan Beaulieu    schedule 13.05.2015


Ответы (2)


Возможно, все, что вам нужно, это чтобы нажатия на заголовок игнорировались. Установите userInteractionEnabled = NO в заголовке.

person Graham Perks    schedule 13.05.2015
comment
Это работает, но теперь у меня другая проблема. В ячейке заголовка есть кнопка с прикрепленной к ней функцией и переходом... Как включить только эту кнопку? - person Maxwell Bo Blessen; 14.05.2015

Если userInteractionEnabled to NO не работает, поскольку у вас также есть кнопки в заголовке раздела, добавьте это в подкласс вашего заголовка:

// We don't want touches, but we do want our subviews to get them.
// (So userInteractionEnabled = NO won't work, that'll stop subviews getting touches)
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    id hitView = [super hitTest:point withEvent:event];
    return (hitView == self) ? nil : hitView;
}
person Graham Perks    schedule 14.05.2015
comment
Можете ли вы помочь мне перевести это на Swift? - person Maxwell Bo Blessen; 15.05.2015