在uitableview中更改特定单元格

时间:2011-10-13 07:30:15

标签: objective-c xcode uitableview

我有一个uitableview但我想禁用一些单元格并让其他单元格启用。 我使用以下代码禁用除cellForRowAtIndexPath中的第一个以外的所有单元格:

if ([indexPath row] > 0 ) {
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.userInteractionEnabled = NO;
    cell.textLabel.textColor = [UIColor lightGrayColor];
}

但是,它不是禁用所有单元格而是启用第一个单元格,而是禁用所有单元格并启用最后一个单元格。为什么会这样?我该怎么做才能让它发挥作用?

BTW这是我所有cellForRowAtIndexPath的代码:

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

    sectionContents = [[self listOfItems] objectAtIndex:[indexPath section]];
    contentsForThisRow = [sectionContents objectAtIndex:[indexPath row]];

    if ([indexPath row] > 0 ) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.userInteractionEnabled = NO;
        cell.textLabel.textColor = [UIColor lightGrayColor];
    }
    static NSString *CellIdentifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = contentsForThisRow;
    return cell;
}

2 个答案:

答案 0 :(得分:0)

cellForRowAtIndexPath:的代码替换为此代码

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

    sectionContents = [[self listOfItems] objectAtIndex:[indexPath section]];
    contentsForThisRow = [sectionContents objectAtIndex:[indexPath row]];

    static NSString *CellIdentifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1        reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = contentsForThisRow;
    if ([indexPath row] > 0 ) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.userInteractionEnabled = NO;
        cell.textLabel.textColor = [UIColor lightGrayColor];
    }
    return cell;
}

答案 1 :(得分:0)

您没有显示声明单元格的位置,但您正在做的是在获取实际单元格之前设置userinteractionEnabled

您必须将此自定义代码放在方法的末尾。

另外,尝试在方法中声明单元格变量,不得在别处使用。

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

    sectionContents = [[self listOfItems] objectAtIndex:[indexPath section]];
    contentsForThisRow = [sectionContents objectAtIndex:[indexPath row]];

    static NSString *CellIdentifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

    if ([indexPath row] > 0 ) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.userInteractionEnabled = NO;
        cell.textLabel.textColor = [UIColor lightGrayColor];
    }

    cell.textLabel.text = contentsForThisRow;
    return cell;
}