0

我最近的挫败感是我UIButton的每个子视图中的一个子视图,我想根据每个子句的特定子句。我的代码几乎如下:UITableViewCellUITableViewsetHidden:indexPath

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

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        [self initCell:cell forIndexPath:indexPath];
    }
    [self updateCell:cell forIndexPath:indexPath];
    return cell;
}

init 和 update 方法如下:

- (void)initCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath
{
    ...

    UIButton *btnMy = [UIButton buttonWithType:UIButtonTypeCustom];
    btnMy.tag = kButtonMyTag;
    [btnMy setFrame:CGRectMake(170, 45, 100, 30)];
    [btnMy setBackgroundImage:[UIImage imageNamed:@"btn_image"] forState:UIControlStateNormal];
    btnMy.adjustsImageWhenHighlighted = YES;
    [btnMy setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    btnMy.titleLabel.font = [UIFont fontWithName:@"MyFont" size:14];
    [btnMy addTarget:self action:@selector(btnMyPressed:) forControlEvents:UIControlEventTouchUpInside];
    [cell addSubview:btnMy];

    UIImageView *imgViewAccessory = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"table_accessory"]];
    cell.accessoryView = imgViewAccessory;
    [imgViewAccessory release];
}

- (void)updateCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath
{
    UIButton *btnMy = (UIButton *)[cell viewWithTag:kButtonMyTag];

    MyObject *object = (MyObject *)[self.dataSource objectAtIndex:indexPath.row];

    if(object.meetsCondition) 
    {
        btnMy.hidden = NO;
    }
    else 
    {
        btnMy.hidden = YES;
    }
    ...
}

令人沮丧的结果是,根据 updateCell 方法中的 if 子句,滚动按钮时随机显示和隐藏,而不是像预期的那样。任何帮助将非常感激。提前致谢!

4

2 回答 2

1

您应该制作自定义单元格并根据条件显示和隐藏按钮

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *nib;
    static NSString *cellIdentifier= @"cell";

    UITableViewCell *theCell = [self.tblView dequeueReusableCellWithIdentifier:cellIdentifier];

    if([theCell.contentView subviews]){
        for(UIView *view in [theCell.contentView subviews]){
            [view removeFromSuperview];
        }
    }

    if(theCell== nil)
    {
        nib  = [[NSBundle mainBundle] loadNibNamed:@"Your custom cell name" owner:self options:nil]; 
        theCell = [nib objectAtIndex:0];
        theCell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    UIButton *btn=(UIButton*)[theCell.contentView viewWithTag:101];
if(yourcondition)
//hide button
else
//show button
}

这会做

于 2012-12-19T12:35:20.540 回答
0

CellForRowAtIndexPath在您的Also中使用此代码。

 MyObject *object = (MyObject *)[self.dataSource objectAtIndex:indexPath.row];

    if(object.meetsCondition) {
        btnMy.hidden = NO;
    }
    else {
        btnMy.hidden = YES;
    }
于 2012-12-19T11:38:00.020 回答