2012-05-27 73 views
22

我通常使用viewDidAppear方法做就認爲一些用戶界面的東西后,完成的顯現和我用這個方法在各種情況下均是非常有用的,但是,我需要以後做一個UITableViewCell一些UI變化它完成出現,是否有任何可用的方法在SDK中做類似的工作,如viewDidAppearUITableViewCellviewDidAppear爲UITableViewCell的

p.s. willDisplayCell在我的情況下不起作用,如果它確實存在,我需要類似didDisplayCell的東西。

+0

你可以通過一些正在使用的代碼..你想要實現什麼...也就是說UI的變化在某種意義上是什麼樣的變化..你可以請多解釋一下.. –

+0

看看這個答案這個問題:*在UITableView完成請求數據時得到通知?* http://stackoverflow.com/a/3060232/1028709 –

+0

你不能在你的表格單元格子類的init中直接做什麼的原因是什麼?爲什麼'willDisplayCell'不能爲你工作? –

回答

2

方法viewDidLoad與UIViewController及其子類有關,所以我們不能在UITableViewCell中使用它,這是UIView子類。我在我的應用程序中使用的解決方案是重寫UITableViewCell的layoutSubViews方法,並且我延遲了一段時間的操作,如下所示。

- (void)layoutSubViews 
{ 
    [super layoutSubviews]; 

    [self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0]; 
} 
+16

在你的UI配置中使用延遲?對我來說似乎很可怕的做法不行? – tommybananas

+0

確實可怕的做法。 –

+0

不一定。如果他希望減輕UIScrollView的性能影響,這可能是一個可能的解決方案。 – thedeveloper3124

9

如果需要應對改變細胞的框架和佈局調整,你需要實現細胞級-layoutSubviews。請記得致電[super layoutSubviews]

+1

layoutSubviews的問題在於它在單元出列時總是被調用。如果您在初次設置單元格時只需要更改一次幀,則可以在awakeFromNib中進行更改。與此相關的問題是,您無法從layout中獲取自動佈局的單元格的調整範圍,只能在layoutSubviews中獲取。 – thedeveloper3124

16

UITableViewDelegate具有以下功能:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) 

細胞本身不具備這個回調。

+0

正確的答案! – Fattie