【问题标题】:UITableViewCell going black when selected programmatically以编程方式选择时 UITableViewCell 变黑
【发布时间】:2010-08-26 14:38:34
【问题描述】:

我想知道为什么当我将所选属性设置为 ON 时,这段代码会给我黑色的 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

如果您需要更多代码,请大喊。 :)

提前非常感谢, 尼克

【问题讨论】:

  • 你有这个解决方案吗?有同样的问题...

标签: uitableview


【解决方案1】:

我遇到了同样的问题,并通过将 cell.selected = YES 移动到 tableView:willDisplayCell:forRowAtIndexPath 来解决它。

我认为这可能与 UITableViewCell 文档底部关于更改背景颜色需要使用 tableView:willDisplayCell:forRowAtIndexPath 的注释有关(大概selected 设置背景颜色)。

【讨论】:

  • 有机会我会去看看!非常感谢。
  • 谢谢!节省了我大量阅读文档的时间。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2011-11-14
相关资源
最近更新 更多