我正在尝试从表格视图中获取特定的单元格,以便我可以更改它的标签并停止活动指示器。
我遇到的问题是cellForRowAtIndexPath
返回零。
我的表视图只有 1 行。
Code :
- (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 部分?)
值得一提的是,如果单元格不可见,cellForRowAtIndexPath: 也会返回 nil。
当线程化时,这尤其可能成为一个问题......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)