在我的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
答案 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;