UITableView子类init安装程序无法正常工作

时间:2015-09-29 18:51:20

标签: ios swift uitableview

我正在使用Swift创建一个UITableView子类,我的值并不坚持。

我这样创建:

override init(frame: CGRect, style:UITableViewStyle) {
        super.init(frame: frame, style: style)
        setupTableView()
    }

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setupTableView() {
    self.delegate = self
    self.dataSource = self
    self.bounces = false
    self.separatorStyle = .None
    self.backgroundColor = Color.lightBackground
    self.addSubview(footerImageView)
    let cellNib = UINib(nibName: "MenuTableViewCell", bundle: nil)
    self.registerNib(cellNib, forCellReuseIdentifier: "MenuTableViewCell")
}

当视图出现时,分隔符仍然存在,背景仍为白色(Color.lightBackground为浅灰色)。我可以看到tableView背景,因为单元格没有填满屏幕。我的细胞确实加载了正确的背景颜色。

单元格会加载,所以我知道我的委托和数据源正在运行。

为什么我的属性没有设置?

1 个答案:

答案 0 :(得分:1)

我经历过同样的问题,这个技巧有所帮助:

override init(frame: CGRect, style: UITableViewStyle) {
    super.init(frame: frame, style: style)
    setup()
}

func setup() {
    DispatchQueue.main.async {
        self.delegate = self
        self.dataSource = self
        self.backgroundColor = .clear
        self.register(SearchResultCell.self,  forCellReuseIdentifier: "SearchResultCell")
        self.separatorStyle = .none
        self.tableFooterView = UIView()
    }
}

老实说,我不知道为什么会这么做。但main.async解决了这个问题。

好的,我明白了。该问题是由在包含视图控制器的初始化程序中初始化UITableView的子类实例引起的。 制作表格视图lazy var也可以解决问题。