使用委托更改标签文字颜色
我有两个视图控制器, 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