2

當在特定於表格視圖單元格的背景中處理某些數據時,我想將表格視圖單元格的視圖置於半透明模式,並將一個進度在表格視圖單元格頂部的指示器視圖。在表格視圖單元格頂部顯示指示器視圖

我嘗試下面的代碼,但沒有活動的指標顯示:

-(void)showActivityIndicatorInTableView:(UITableView*)tableView 
atIndexPath:(NSIndexPath*)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UIView *view = [[UIView alloc] initWithFrame:cell.contentView.frame]; 
    view.tag = 50; 

    UIActivityIndicatorView *ac = [[UIActivityIndicatorView alloc] 
    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    CGRect frame = view.frame; 
    ac.center = CGPointMake(frame.size.width/2, frame.size.height/2); 
    [view addSubview:ac]; 
    [ac startAnimating]; 
} 

什麼是錯我的代碼?什麼是更好的實現方式?我怎樣才能在覆蓋表格視圖單元格的半透明視圖中顯示指標視圖?

謝謝!

回答

2

從它的外觀來看,你永遠不會將你創建的UIView添加到你的單元格中。您可能要做到以下幾點:

[cell.contentView addSubview:view]; 

此外,您可能想改變你添加到你的東西比實際的電池不同視圖的框架。這將允許您在UITableView內滾動而不會影響您設置的工作人員視圖。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.contentView.frame.size.width, cell.contentView.frame.size.height)]; 

爲了使視圖半透明:

[view setOpaque:YES]; 
[view setBackgroundColor:[UIColor colorWithWhite:1.0 alpha:0.5]]; 
+0

我確實忘記將子視圖添加到內容視圖。謝謝你指點我這個錯誤!另外,我沒有將活動指示器顏色設置爲與白色不同的顏色。由於我的背景是白色的,指示器視圖不可見。 – AlexR

+0

請閱讀@ dasblinkenlight的回答。他有一個非常有用的觀點。你仍然需要我在答案中放入的東西,以便按照你想要的方式工作。 –

+0

我用這兩個答案來解決我的問題,現在效果很好。在顯示指標視圖時,您是否有任何關於如何使視圖變爲半透明的建議? – AlexR

3

一般來說,這不是一個好主意,惹周圍UITableViewCell對象由來自外部的UITableView擁有,因爲細胞是你在滾動屏幕後可能會得到回收,因此即使添加活動指示符,它也可能會被刪除。

更好的方法是讓您的cellForRowAtIndexPath:處理活動指示器的添加和刪除。爲此,您的模型需要保持活動指標應顯示在其上的索引路徑的註冊表(「註冊表」可以像單個變量一樣簡單,如果您從不同時打開多個單元格上的活動指示符) 。 cellForRowAtIndexPath應該讀取該註冊表,並相應地修飾該單元格。如果要添加活動指示器,請將相應的索引路徑添加到註冊表中,然後在表視圖上調用reloadRowsAtIndexPaths:withRowAnimation:。當您需要關閉活動指示器時,從註冊表中刪除單元格的索引路徑,然後重新加載該行。

本質上,模型需要成爲國家的守護者。所有與改變UIView子類有關的事情都需要在tableView:cellForRowAtIndexPath:中發生。最後,當國家需要改變時,控制器應該讓你的桌面視圖「輕拍在肩上」。

+0

感謝您將代碼放入'cellForRowAtIndexPath'並使用單獨的'NSArray?註冊應該顯示指示器視圖的表格視圖單元格的索引路徑。結合Simon在他的回答中給我的提示,我得到了這個工作。在顯示指標視圖時,您是否有任何關於如何使視圖變爲半透明的建議? – AlexR

+0

@AlexR查看[此問題](http://stackoverflow.com/q/7123118/335858),瞭解如何使單元變爲半透明。請注意單元格透明度,因爲它可能會顯着降低表格的滾動速度。 – dasblinkenlight

相關問題