[英]Change label text color using delegate
我有两个视图控制器, ParentViewController
有使用SecondViewController
更新的标签。 现在我想从ChildViewController
更改ParentViewController
的标签文本颜色,为此我正在使用协议和委托,但它显示错误。
我的代码是这样的:
子视图控制器.h
@protocol ViewControllerDelegate
-(void) updateLabel;
@end
@interface ChildViewController : UIViewController<UITextFieldDelegate,UITextViewDelegate>
{
id <ViewControllerDelegate> delegate;
}
@property (assign) id <ViewControllerDelegate> delegate;
@end
子视图控制器.m
@implementation childViewController
@synthesize delegate;
- (IBAction)backBtn:(id)sender {
[delegate updateLabel];
}
@end
父视图控制器.h
#import <UIKit/UIKit.h>
#import "childViewController.h"
@interface ParentViewController : UIViewController<UserResizableViewDelegate,ViewControllerDelegate>
@end
父视图控制器.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
更新
这就是我创建标签的方式
父视图控制器.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];
}
并在 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.