内部Subclassed UITableViewCell覆盖Func LayoutSubviews被称为Double

时间:2015-12-17 21:13:38

标签: swift uitableview

我有一个UITableViewCell的子类,每个单元格调用两次override func layoutSubviews()。这将在单元格中创建多个元素副本。

UITableView返回正确的单元格数并显示正确的单元格数,但布局功能会将少数属性重置为nil。因此,错误地渲染了大量数据。

TableView Inside UIViewController:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return userMatches.count    // return 2 correctly
}


func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1

}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {


    return self.view.bounds.height * 0.20

}


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

    let cell: MatchTableViewCell = self.matchTableView.dequeueReusableCellWithIdentifier("matchCell", forIndexPath: indexPath) as! MatchTableViewCell

    cell.matchDetails = userMatches[indexPath.row]
    cell.userInteractionEnabled = true
    cell.selectionStyle = UITableViewCellSelectionStyle.None

    return cell // creates 2 correctly

}

UITableView子类:

   override func layoutSubviews() {
    super.layoutSubviews()

// runs 4 times

    let userHelperIconArray = [userZoom, userTakeTwo, userStopper]
    let opponentHelperIconArray = [opponentZoom, opponentTakeTwo, opponentStopper]

    layoutHelperInventoryIcons(self, opponentHelperIconArray: opponentHelperIconArray, userHelperIconArray: userHelperIconArray, opponentNameLabel: opponentName)
    layoutMiniGameboard(self)

    self.layer.borderWidth = 1.0
    self.layer.borderColor = UIColor.blackColor().CGColor

    print("one")

    turnIdentifier(self, matchDetails: matchDetails, opponentNameLabel: opponentName)

}

1 个答案:

答案 0 :(得分:1)

无论如何,你不应该在layoutSubviews这样做。而是将配置移动到单独的方法,并让表视图数据源在出列单元格后调用该配置方法。