2

在尝试了各种选项并阅读了关于 SO 的众多答案之后,我发布了这个问题,希望有人可以提供一些见解或解决这个问题:

iOS5.1、XCode 4.4.1、故事板、ARC

我有一个“分组”表格视图,每个单元格都包含一堆标签、图像和按钮。标签之一,描述标签,它的文本可以大或小,这意味着如果文本很大,我必须相应地增加标签的大小并相应地将按钮放在下面。我能够做到这一切,但问题是当我滚动经过第一个单元格时按钮会出现两次,并在滚动时不断重复。

这是代码,我所做的只是根据文本计算标签的高度,调整标签的大小,然后将 3 个按钮相应地放置在描述标签下方。

下面的代码仅适用于一个按钮,但这应该可以让您了解我在做什么。我曾尝试在自定义单元格类中的“willDisplayCell”中做类似的事情,但当我在表格视图中向下滚动时,3 个按钮仍然重复。请参考截图,前三个按钮甚至不应该显示。

我注意到前 3 个按钮的位置与忽略sizeIncrement 相同,即“359.0f + sizeIncrement +20”减去“sizeIncrement”,“sizeIncrement”= 计算后描述标签的高度

我还注意到,如果我这样做

float y = 359.0f + 20;

而不是这个

float y = 359.0f + sizeIncrement +20;

按钮问题的重复消失了。

PS:我知道这不是最好的代码,但我一直在尝试很多东西来解决这个问题,所以此时并没有考虑最佳实践等。

屏幕截图上显示 2 个单元格,前 3 个按钮不应显示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 static NSString *CellIdentifier = @"tipsid";

 TipsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if (cell == nil)
 {
     cell = [[TipsCell alloc]
             initWithStyle:UITableViewCellStyleDefault
             reuseIdentifier:CellIdentifier];
 }

 id tip = [_tips objectAtIndex: [indexPath section]];

 NSDictionary *tipForIndex = [_tips objectAtIndex: [indexPath section]];
 float sizeIncrement = [Utility getLabelHeightForText:[tipForIndex objectForKey:@"tipDescripion"]
                                            withWidth:285.0f
                                             withFont:[UIFont systemFontOfSize:14.0f]];

 // Here I Resize the Label, code below to create a button and position accordingly.

 float y = 359.0f + sizeIncrement +20;

 UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(10, y, 80, 26)];
 likeButton.tag = [indexPath section];     

 // add targets and actions
 [likeButton addTarget:self action:@selector(likebuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
 [likeButton setBackgroundImage:[UIImage imageNamed:@"likebutton.png"] forState:UIControlStateNormal];

 [likeButton setImage:[UIImage imageNamed:@"likedButton.png"] forState:UIControlStateSelected];

 // add to a view
 [cell.contentView addSubview:likeButton];

.....类似地创建2个其他按钮

4

1 回答 1

1

您应该将按钮创建移动到if (cell == nil)运算符中:

if (cell == nil)
{
   cell = [[TipsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

   // like button
   float y = 359.0f + sizeIncrement +20;

   UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(10, y, 80, 26)];
   likeButton.tag = LIKE_BUTTON_TAG_UNIQUE_IN_CONTENT_VIEW; // <<<<<<<<<<----------------     

   // add targets and actions
   [likeButton addTarget:self action:@selector(likebuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
   [likeButton setBackgroundImage:[UIImage imageNamed:@"likebutton.png"] forState:UIControlStateNormal];

   [likeButton setImage:[UIImage imageNamed:@"likedButton.png"] forState:UIControlStateSelected];

   // add to a view
   [cell.contentView addSubview:likeButton];

   // other buttons
}

// and here you can adjust button positions
UIButton *likeButton = [self.contentView viewWithIndex:LIKE_BUTTON_TAG_UNIQUE_IN_CONTENT_VIEW];
于 2012-09-03T19:41:45.150 回答