2014-10-28 81 views
0

我添加一個UIProgressView到表格單元格,如圖所示:通過標籤訪問UITableViewCell子視圖?

UITableViewCell *cell = [videosTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:(long)videoIndex inSection:0]]; 
UIProgressView *prg =[[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; 
prg.tag = (long)videoIndex + 1000; 
[cell addSubview:prg]; 

我後來我(在AppDelegate.m)嘗試使用訪問此進度條下面:

UITableView *table = (UITableView *)[self.videosTableController.view viewWithTag:8888]; 
UITableViewCell *cell = [table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]]; 
UIProgressView *progressBar = (UIProgressView *)[cell viewWithTag:index+1000]; 
return progressBar; //this always is nil..... 

這是怎麼回事上?我已驗證tablecell不返回零,但UIProgressView似乎不在單元格中。我瀏覽了單元格的子視圖,但看不到進度條。

+0

你確定'videoIndex'和'index'是一樣的嗎? – Slayter 2014-10-28 14:39:01

+1

你確定這不是一個細胞回收問題嗎?我也建議你使用不正確的模式。而不是試圖直接設置和更改單元格;對單元格顯示屬性的模型對象進行更改並讓單元格從那裏接受更改是一個更好的主意。看看你的描述 - 當你說你試圖訪問_AppDelegate_中的單元格 - 這本身就是一種代碼味道。 – Anorak 2014-10-28 14:40:16

+0

@Slayter - 是的,我已經證實他們是一樣的。 – croceldon 2014-10-28 14:43:14

回答

0

您應該設置prg.tag = (long)videoIndex + 1000;
tableView:cellForRowAtIndexPath:

這是因爲[table cellForRowAtIndexPath:]可以從tableView:cellForRowAtIndexPath:在某些情況下,返回一個新的細胞實例。

因此,您應該區分tableView:cellForRowAtIndexPath:內需要的單元格(需要進展還是沒有),創建一個合適的單元格並進行配置並返回。