我想从表视图中获取特定的单元格,以便我可以更改它的标签并停止活动指示器。cellForRowAtIndexPath返回零
我遇到的问题是cellForRowAtIndexPath
返回零。
我的表格视图只有1行。
代码:
- (id) initWithNibName: (NSString*) nibNameOrNil bundle: (NSBundle*) nibBundleOrNil
{
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self)
{
numberOfRows = 1;
}
return self;
}
- (NSInteger) tableView: (UITableView*) tableView numberOfRowsInSection: (NSInteger) section
{
return numberOfRows;
}
-(void) stopCellIndicator
{
LiveUserFeedCell* cell = (LiveUserFeedCell*)[self.liveFeed cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[cell.activityIndicator stopAnimating];
cell.middleLabel.text = @"N/a";
}
- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath
{
static NSString *CellIdentifier = @"UserFeedCell";
LiveUserFeedCell *cell = (LiveUserFeedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"LiveUserFeedCell" owner:self options:nil];
cell = (LiveUserFeedCell *)[nib objectAtIndex:0];
}
[cell.imgView setImage:[TUNinePatchCache imageOfSize:cell.imgView.frame.size forNinePatchNamed:@"bg_home_newsfeed_normal"]];
if (shouldDisplayLoading == NO)
{
NSArray* songs = homeScreen.recentPlaybacks.songs;
TWSong* song = [songs objectAtIndex:index];
cell.middleLabel.text = @"";
[cell.activityIndicator stopAnimating];
UIFont *font = [UIFont fontWithName:@"Trebuchet MS" size:14];
NSString* kText =[NSString stringWithFormat:@"<b>%@</b> is listening to %@ by %@",song.user,song.title,song.artist];
for(int i = 14; i > 0; i=i-1)
{
// Set the new font size.
font = [font fontWithSize:i];
// You can log the size you're trying: NSLog(@"Trying size: %u", i);
/* This step is important: We make a constraint box
using only the fixed WIDTH of the UILabel. The height will
be checked later. */
CGSize constraintSize = CGSizeMake(cell.isWatching.frame.size.width, MAXFLOAT);
// This step checks how tall the label would be with the desired font.
CGSize labelSize = [kText sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
/* Here is where you use the height requirement!
Set the value in the if statement to the height of your UILabel
If the label fits into your required height, it will break the loop
and use that font size. */
if(labelSize.height <= cell.isWatching.frame.size.height)
break;
}
cell.isWatching.font = font;
cell.isWatching.text = [TTStyledText textFromXHTML:kText lineBreaks:YES URLs:YES];
cell.isWatching.textAlignment = UITextAlignmentCenter;
++index;
if (index == [songs count])
index=0;
}
else
{
[cell.activityIndicator startAnimating];
}
return cell;
}
但是,如果我这样做,我也得到了有效的细胞:
NSArray *indexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:0 inSection:0],
nil];
numberOfRows = 0;
[self.liveFeed deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
numberOfRows = 1;
[self.liveFeed insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
LiveUserFeedCell* cell = (LiveUserFeedCell*)[self.liveFeed cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[cell.activityIndicator stopAnimating];
cell.middleLabel.text = @"N/a";
任何想法如何解决这一问题? (可能是默认的第一个单元格是不是在行0 0段?)
我看不到你在哪里覆盖cellForRowAtIndex。只要你不这样做,就不会有任何细胞。 – Krumelur 2011-03-08 13:15:20
增加了更多的代码..现在看看。 thx – Idan 2011-03-08 13:19:53