0

我试图将 uitableview 单元格中的特定按钮设置为非活动状态并更改其他一些属性。我从 NSUserdefaults 中检索一个运行良好的布尔值。这就是我试图做到这一点的方式。- PopularObjectID 是一个带有一堆字符串的可变数组。此代码在此方法中:

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

这是代码:

NSString *objID = [NSString stringWithFormat:@"%@",[popularObjectIDs objectAtIndex:indexPath.row]];

if(![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@OBJPressed",objID]]) {}
else {
    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];




[(UIButton *)[thisCell.contentView viewWithTag:6] setBackgroundColor:[UIColor grayColor]];
[(UIButton *)[thisCell.contentView viewWithTag:9] setBackgroundColor:[UIColor grayColor]];
[(UIButton *)[thisCell.contentView viewWithTag:6] setEnabled:NO];
[(UIButton *)[thisCell.contentView viewWithTag:9] setEnabled:NO];
}

我认为我可能在这里犯了一个非常愚蠢的错误,但我对 UITableViews 不是很好。希望这是可以理解的,但如果不是;不要犹豫,问。

谢谢!(请友善,我是新手)

4

3 回答 3

0

如果您将该代码放入
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 您无法使用
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; 因为此时indexPath尚未创建该单元格的单元格。所以[tableView cellForRowAtIndexPath:indexPath]只会返回零。你应该做的是:

static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if(!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSString *objID = [NSString stringWithFormat:@"%@",[popularObjectIDs objectAtIndex:indexPath.row]];

if(![[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@OBJPressed",objID]]) {}
else {
    [(UIButton *)[cell.contentView viewWithTag:6] setBackgroundColor:[UIColor grayColor]];
    [(UIButton *)[cell.contentView viewWithTag:9] setBackgroundColor:[UIColor grayColor]];
    [(UIButton *)[cell.contentView viewWithTag:6] setEnabled:NO];
    [(UIButton *)[cell.contentView viewWithTag:9] setEnabled:NO];
}
return cell;
于 2013-06-28T00:50:12.937 回答
0

无需在单元格上调用 contentView。就这样做

UIButton *button = (UIButton *)[thisCell viewWithTag:6];
[button setBackgroundColor:[UIColor grayColor]];
于 2013-06-27T23:38:01.253 回答
0

你应该这样做:

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath
{
    static NSString* simpleTableIdentifier = @"TSTableViewCell";

    TSTableViewCell* cell = (TSTableViewCell*)[tableView dequeueReusableCellWithIdentifier: simpleTableIdentifier];

    if (cell == nil)
    {
        // Create TSTableViewCell.xib with UITableViewCell (as TSTableViewCell)
        NSArray* nib = [[NSBundle mainBundle] loadNibNamed: simpleTableIdentifier
                                                     owner: self
                                                   options: nil];
        cell = [nib objectAtIndex: 0];
    }

    NSString* objID = [NSString stringWithFormat:@"%@",[popularObjectIDs objectAtIndex:indexPath.row]];

    if([[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@OBJPressed",objID]])
    {
       [cell.button6 setBackgroundColor: [UIColor grayColor]];
       [cell.button6 setEnabled: NO];
       [cell.button9 setBackgroundColor: [UIColor grayColor]];
       [cell.button9 setEnabled: NO];
    }
    else
    {
        // Set up button's property by default
    }

    return cell;
}
于 2013-06-28T00:40:26.790 回答