ios细胞背景颜色必须改变

时间:2013-11-21 03:08:00

标签: ios uitableview core-data background-color

在我的ios应用程序中,我有一个名为PersonalDetailTVC的几个单元格的视图。在另一个视图上选择一个值后,应用程序返回到PersonalDetailTVC,我希望某些单元格的背景颜色根据新值更改,但只有当我再次返回视图时颜色才会更改。你能帮帮我吗?

#import "PersonDetailTVC.h"

@implementation PersonDetailTVC
@synthesize delegate;
@synthesize person = _person;
@synthesize selectedRole;
@synthesize personFirstnameTextField = _personFirstnameTextField;
@synthesize personSurnameTextField = _personSurnameTextField;
@synthesize personRoleTableViewCell = _personRoleTableViewCell;
@synthesize groupColorTableViewCell = _groupColorTableViewCell;



- (void)viewDidLoad 
{
    NSLog(@"Setting the value of fields in this static table to that of the passed Person");
    //self.personNameTextField.text = self.person.name;
    self.personFirstnameTextField.text = self.person.firstname;
    self.personSurnameTextField.text = self.person.surname;
    self.personRoleTableViewCell.textLabel.text = self.person.inRole.name;
    self.groupColorTableViewCell.textLabel.text = self.person.hasColor.color;
    self.selectedRole = self.person.inRole; // ensure null role doesn't get saved.

    if ([self.person.hasColor.color isEqual:@"Grey"]){
        self.groupColorTableViewCell.backgroundColor = [UIColor colorWithRed:21.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1];
    }

    UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
    [tgr setCancelsTouchesInView:NO];
    [self.tableView addGestureRecognizer:tgr];

    [super viewDidLoad];
}

- (void)viewDidUnload
{
    //[self setPersonNameTextField:nil];
    [self setPersonFirstnameTextField:nil];
    [self setPersonSurnameTextField:nil];
    [self setPersonRoleTableViewCell:nil];
     [self setGroupColorTableViewCell:nil];

    [super viewDidUnload];
}

- (IBAction)save:(id)sender
{
    NSLog(@"Telling the PersonDetailTVC Delegate that Save was tapped on the PersonDetailTVC");

    self.person.firstname = self.personFirstnameTextField.text; // Set Firstname
    self.person.surname = self.personSurnameTextField.text; // Set Surname
    [self.person setInRole:self.selectedRole];
    [self.person setHasColor:self.selectedRole];// Set Relationship!!!
    [self.person.managedObjectContext save:nil];  // write to database
    [self.delegate theSaveButtonOnThePersonDetailTVCWasTapped:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  // !
{
    if ([segue.identifier isEqualToString:@"Person Role Segue"])
    {
        NSLog(@"Setting PersonDetailTVC as a delegate of PersonRoleTVC");
        PersonRoleTVC *personRoleTVC = segue.destinationViewController;
        personRoleTVC.delegate = self;
        personRoleTVC.selectedPerson = self.person;
    }
    else {
        NSLog(@"Unidentified Segue Attempted!");
    }
}

- (void)dismissKeyboard {
    [self.view endEditing:TRUE];
}

- (void)roleWasSelectedOnPersonRoleTVC:(PersonRoleTVC *)controller 
{
    self.personRoleTableViewCell.textLabel.text = controller.selectedRole.name;
    self.groupColorTableViewCell.textLabel.text = controller.selectedRole.color;
    self.selectedRole = controller.selectedRole;




    NSLog(@"PersonDetailTVC reports that the %@ role was selected on the PersonRoleTVC", controller.selectedRole.name);
    [controller.navigationController popViewControllerAnimated:YES];
}


@end

1 个答案:

答案 0 :(得分:0)

据我所知,您并未在提供的代码中的任何位置更改颜色。在阅读代码时,我注意到了一些事情,所以我想我会和你分享它,也许它会有所帮助:


如果我理解正确,您使用的UITableViewCell没有UITableView。这实际上不是问题,因为UITableViewCell派生自UIView,但该单元格不会有UITableViewCell的行为(因为这通常由UITableView控制)。手动添加UITableViewCell作为子视图时,单元格将具有UIView的默认行为。


save:方法中,我看到以下两行:

[self.person setInRole:self.selectedRole];
[self.person setHasColor:self.selectedRole];// Set Relationship!!!

您是否故意将self.selectedRole传递给属性hasColor(或setHasColor:方法)?由于我不知道这些对象的类型,这可能没问题,但看起来你应该在那里设置颜色。


roleWasSelectedOnPersonRoleTVC:方法中,您当前正在设置文本属性两次:

self.personRoleTableViewCell.textLabel.text = controller.selectedRole.name;
self.groupColorTableViewCell.textLabel.text = controller.selectedRole.color;

最后一行不应该是这样的吗?

self.groupColorTableViewCell.textLabel.textColor = controller.selectedRole.color;