2012-11-12 92 views
0

我已嘗試過所有內容,並且在設置了didSelectRowForIndexPath時UIActivityMonitorView不會旋轉。我訪問自定義的tableview細胞與無法修改自定義tableview單元格屬性

CustomCell *cell = (CustomCell *) [tableview cellForRowAtIndexPath];

我可以看到電池和它的屬性在調試器初始化,但是當我嘗試對細胞沒有進行任何修改變化。我將單元格activityMonitor IBOutlet設置爲在performSelectorAfterDelay中開始旋轉,沒有運氣。當我嘗試將單元格設置爲0時,也不會發生任何事情。

但是,如果我設置微調器通過IB旋轉,它會在單元加載時起作用。

我也嘗試通過標籤訪問它,但它沒有奏效。

如何設置自定義tableview單元格上的屬性?

+0

嘗試[cell setNeedsDisplay]; – Bergasms

回答

1

檢出Customizing Cells表視圖編程指南。但是,具體情況因故事板,NIB或編程創建的UITableViewCell單元而異。您必須分享您的tableView:cellForRowAtIndexPath:和您的tableView:didSelectRowAtIndexPath:,以便我們診斷髮生了什麼。下面,我將向您展示一個使用旋轉活動指示器的例子,但這裏沒有什麼特別的。我懷疑你的應用程序有一些簡單的事情,但除非我們能夠看到你的代碼,否則我們無法爲你提供幫助。

但是,爲了向您展示一個示例,假設您已使用在Interface Builder中定義的接口對UITableViewCell進行了子類化。這是一個示例didSelectRowAtIndexPath,它啓動旋轉活動指示器,並在15秒後關閉它。

​​

而且在這種情況下,我需要確保我tableView:cellForRowAtIndexPath:着眼於模型數據計算出是否需要出示紡紗活動的指標,也:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"TestCell"; 
    TestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // if I'm using storyboards, the following isn't needed, but if not, I might use something 
    // like the following to load the custom cell from a NIB 

    //if (cell == nil) 
    //{ 
    // NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TestCell" owner:self options:nil]; 
    // cell = (TestCell *)[nib objectAtIndex:0]; 
    //} 

    // this happens to be my model structure, where I have an array of sections, 
    // and each section has its array of Row objects for that section 

    Section *section = self.sections[indexPath.section]; 
    Row *row = section.rows[indexPath.row]; 

    // each "Row" object has two text fields, which I use to update the 
    // two labels in my TestCell subclass of UITableViewCell 

    cell.label1.text = row.text1; 
    cell.label2.text = row.text2; 

    // for this row of this section, figure out whether I need to start animating 
    // the UIActivityIndicator 

    if (row.loading) 
     [cell addActivityIndicator]; 
    else 
     [cell removeActivityIndicator]; 

    return cell; 
} 

在我子類UITableViewCell這裏是代碼添加一個活動的指標,並刪除它:

@interface TestCell() 

@property (strong, nonatomic) UIActivityIndicatorView *activity; 

@end 

@implementation TestCell 

- (void)addActivityIndicator 
{ 
    if (!self.activity) 
    { 
     self.activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
     self.activity.center = self.contentView.center; 
    } 
    [self.contentView addSubview:self.activity]; 
    [self.activity startAnimating]; 
} 

- (void)removeActivityIndicator 
{ 
    if (self.activity) 
    { 
     [self.activity stopAnimating]; 
     [self.activity removeFromSuperview]; 
     self.activity = nil; 
    } 
} 

@end 

這是這一切是如何工作的可能只是一個簡單的例子,但IMPL情節可能差別很大(取決於NIB,故事板,以編程方式創建控件,應用模型的性質等)。與其試圖爲您的應用程序改進上述代碼,您可能更容易與我們分享您的代碼,我們希望能夠很快發現問題。問題可能很簡單。

+0

謝謝你的回答,今晚我會試一試,回覆你。 :) – jarryd

相關問題