使用委托更改标签文字颜色

我有两个视图控制器, ParentViewController有使用SecondViewController更新的标签。 现在我想从ChildViewController更改ParentViewController的标签文本颜色,因为我使用的协议和委托,但它显示错误。

我的代码是这样的:

ChildViewController.h

 @protocol ViewControllerDelegate -(void) updateLabel; @end @interface ChildViewController : UIViewController<UITextFieldDelegate,UITextViewDelegate> { id <ViewControllerDelegate> delegate; } @property (assign) id <ViewControllerDelegate> delegate; @end 

ChildViewController.m

 @implementation childViewController @synthesize delegate; - (IBAction)backBtn:(id)sender { [delegate updateLabel]; } @end 

ParentViewController.h

 #import <UIKit/UIKit.h> #import "childViewController.h" @interface ParentViewController : UIViewController<UserResizableViewDelegate,ViewControllerDelegate> @end 

ParentViewController.m

 @implementation ParentViewController - (void)viewDidLoad { ChildViewController.delegate=self; //here it show error that ChildViewController does not have property delegate } - (void)updateLabel { alabel.textColor = [UIColor blueColor]; } @end 

UPDATE

这是我如何创build标签

ParentViewController.m

 - (void)viewDidLoad { CGRect imageFrame = CGRectMake(10, 10, 150, 80); labelResizableView = [[UserResizableView alloc] initWithFrame:imageFrame]; alabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 100)]; alabel.text = @"Drag me!"; //alabel.text = self.newsAsset.title; alabel.adjustsFontSizeToFitWidth = NO; alabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; alabel.font = [UIFont boldSystemFontOfSize:18.0]; //alabel.textColor = [UIColor blueColor]; // alabel.shadowColor = [UIColor whiteColor]; // alabel.shadowOffset = CGSizeMake(0, 1); alabel.backgroundColor = [UIColor clearColor]; alabel.lineBreakMode = UILineBreakModeWordWrap; alabel.numberOfLines = 10; alabel.minimumFontSize = 8.; alabel.adjustsFontSizeToFitWidth = YES; [alabel sizeToFit]; labelResizableView.autoresizingMask = UIViewAutoresizingFlexibleWidth; // enable touch delivery alabel.userInteractionEnabled = YES; UITapGestureRecognizer *doubleTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)]; doubleTap.numberOfTapsRequired = 2; [self.view addGestureRecognizer:doubleTap]; //Calculate the expected size based on the font and linebreak mode of your label CGSize maximumLabelSize = CGSizeMake(296,9999); CGSize expectedLabelSize = [myString sizeWithFont:alabel.font constrainedToSize:maximumLabelSize lineBreakMode:alabel.lineBreakMode]; //adjust the label the the new height. CGRect newFrame = alabel.frame; newFrame.size.height = expectedLabelSize.height+40; newFrame.size.width = expectedLabelSize.width+40; alabel.frame = newFrame; labelResizableView.frame = newFrame; labelResizableView.contentView = alabel; labelResizableView.delegate = self; [self.view addSubview:labelResizableView]; } 

然后当用户点击标签然后

 - (void)labelTap:(UITapGestureRecognizer *)tapGesture { ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:[NSBundle mainBundle]]; [self presentModalViewController:childViewController animated:NO]; } 

然后在用户点击完成button时在ChildViewCoontroller中

 -(IBAction)doneBtn:(id)sender { [adelegate updateLabel]; [self dismissModalViewControllerAnimated:NO]; } 

 #import <UIKit/UIKit.h> #import "childViewController.h" @interface ParentViewController : UIViewController<UserResizableViewDelegate,ViewControllerDelegate> @property (strong, nonatomic) ChildViewController *childViewController; @end @implementation ParentViewController - (void)viewDidLoad { self.childViewController = [[ChildViewController alloc] init]; childViewController.delegate=self; //here it show error that ChildViewController does not have property delegate } @end 

您不设置ChildViewController委托属性。 您将它设置为ParentViewController 。 但是ParentViewController没有那个属性。 在ParentViewController设置ChildViewController's对象的委托属性

 ChildViewController.delegate=self