檢出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,故事板,以編程方式創建控件,應用模型的性質等)。與其試圖爲您的應用程序改進上述代碼,您可能更容易與我們分享您的代碼,我們希望能夠很快發現問題。問題可能很簡單。
來源
2012-11-13 04:12:12
Rob
嘗試[cell setNeedsDisplay]; – Bergasms