代码之家  ›  专栏  ›  技术社区  ›  Nick

UITableViewCell以编程方式选择时变黑

  •  6
  • Nick  · 技术社区  · 14 年前

    我想知道为什么当我在上设置selected属性时,这段代码会给我黑色UITableViewCells。如果我这样做,单元格的内容会变成完全黑色,我不知道为什么。

    //
    //  TableViewAdapter.m
    //  TableviewScanMode
    //
    //  Created by Nick Overdijk on 8/26/10.
    //  Copyright 2010 Nick Overdijk. All rights reserved.
    //
    
    #import "TableViewAdapter.h"
    #import "Model.h"
    
    @implementation TableViewAdapter
    
    @synthesize model;
    
    - (id) initWithModel: (Model*) model {
        self = [super init];
        if(self != nil){
            self->model = [model retain];
        }
    
        return self;
    }
    
    - (void) dealloc {
        [model release];
        [super dealloc];
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return [[model cellData] count];
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [[[model cellData] objectAtIndex: section] count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = nil;
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
    
        cell.textLabel.text = [[[model cellData] objectAtIndex: indexPath.section] objectAtIndex: indexPath.row];
    
        if(indexPath.row == [[model currentSelected] row] && indexPath.section == [[model currentSelected] section]){
            cell.selected = YES;
        } else {
            cell.selected = NO;
        }
    
        return cell;
    }
    
    @end
    
    //
    //  RootViewController.m
    //  TableviewScanMode
    //
    //  Created by Nick Overdijk on 8/24/10.
    //  Copyright Nick Overdijk 2010. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "Model.h"
    #import "TableViewAdapter.h"
    
    
    @implementation RootViewController
    
    
    #pragma mark -
    #pragma mark View lifecycle
    
    - (void)viewDidLoad {
        model = [[Model alloc] init];
        [model addObserver:self
                forKeyPath:@"updatedIndexPaths"
                   options:NSKeyValueObservingOptionNew
                   context:NULL
         ];
    
        [model startSelectionRotation];
    
        adapter = [[TableViewAdapter alloc] initWithModel: model];
        self.tableView.dataSource = adapter;
    
        [super viewDidLoad];
    }
    
    - (void)dealloc {
        [adapter release];
        [model release];
        [super dealloc];
    }
    
    #pragma mark -
    #pragma mark KVO updates
    - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
        NSArray * reloadThese = [change objectForKey: NSKeyValueChangeNewKey];
        [self.tableView reloadRowsAtIndexPaths: reloadThese withRowAnimation: UITableViewRowAnimationFade];
    }
    
    #pragma mark -
    #pragma mark Table view delegate
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    }
    
    
    @end
    

    如果你需要更多的代码,喊。:)

    1 回复  |  直到 14 年前
        1
  •  15
  •   brett    14 年前

    我也遇到了同样的问题,通过移动 cell.selected = YES tableView:willDisplayCell:forRowAtIndexPath 相反。

    我认为这可能与UITableViewCell文档底部的注释有关,该注释涉及到需要使用表格视图:willDisplayCell:forRowAtIndexPath(大概是 selected 设置背景色)。