覆盖子类UITableViewCell中的init

时间:2016-02-24 15:20:12

标签: ios swift uitableview

我想在子类UITableViewCell中使用init(frame: CGRect)

override init(frame: CGRect) {
   super.init(frame: CGRect)
}

但这引发了一个错误:Initializer does not ovrride a designated initializer from its super class,我做错了什么?

5 个答案:

答案 0 :(得分:7)

对于UITableViewCell,你应该重写这个:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

请参阅documentation

如果您希望能够改变细胞'框架,您应该查看委托方法,如:

  • tableView(_:heightForRowAtIndexPath:)行高
  • tableView(_:indentationLevelForRowAtIndexPath:) for row indent

UITableViewDelegatedocumentation

答案 1 :(得分:0)

init(frame: CGRect)不是超类UITableViewCell的初始值设定项。您需要覆盖init(coder: aDecoder)init(style: UITableViewCellStyle, reuseIdentifier: String?)

答案 2 :(得分:0)

是的,UITableViewCell只有两个初始值设定项

public init(style: UITableViewCellStyle, reuseIdentifier: String?)
public init?(coder aDecoder: NSCoder)

答案 3 :(得分:0)

如果您确实想使用init(frame: CGRect),请使用UICollectionViewCell。并使用CGSize(width: view.frame.width, height: 100)设置单元格的大小。例如,

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: 100)
}

它看起来像tableViewCell,您也可以使用init(frame: CGRect)

答案 4 :(得分:0)

情况1: 如果您需要直接更改单元格的高度,可以使用

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

情况2: 如果您需要对某个单元进行子类化,请转到该单元类并覆盖重用标识符

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
 let hrt = heightAnchor.constraint(equalToConstant: 50)
    hrt.isActive = true
 }