2015-09-29 28 views
0

我正在用Swift創建一個UITableView子類,並且我的值不會粘住。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背景,因爲單元格不填充屏幕。我的單元格會加載正確的背景顏色。

單元格會加載,所以我知道我的委託和數據源正在工作。

爲什麼我的屬性沒有設置?

+0

如果在'viewDidLoad()'中設置'backgroundColor',它還是會給你帶來麻煩嗎? – macandyp

+0

這是在tableView子類中,並沒有viewDidLoad。我不想在所有控制器的viewDidLoad中設置這些值,因爲這會影響目的。 – Siriss

+0

我的不好 - 誤解你在做什麼。我沒有任何問題做上述。但是,我沒有使用Color.lightBackground。簡單地將它設置爲'orangeColor()'似乎工作。桌子是彈跳的還是仍然在那裏? – macandyp

回答

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也可能解決問題。