问题描述
我有两个视图控制器, ParentViewController
具有使用 SecondViewController
更新的标签。
现在我想从 ChildViewController
更改 ParentViewController
的标签文本颜色,因为我正在使用协议并且委托但它显示错误。
I have two view controller, ParentViewController
have label that updated using SecondViewController
.Now I want to change ParentViewController
's label text color from ChildViewController
, for that i am using protocol and delegate but it shows error.
我的代码是这样的:
ChildViewController.h
ChildViewController.h
@protocol ViewControllerDelegate
-(void) updateLabel;
@end
@interface ChildViewController : UIViewController<UITextFieldDelegate,UITextViewDelegate>
{
id <ViewControllerDelegate> delegate;
}
@property (assign) id <ViewControllerDelegate> delegate;
@end
ChildViewController.m
ChildViewController.m
@implementation childViewController
@synthesize delegate;
- (IBAction)backBtn:(id)sender {
[delegate updateLabel];
}
@end
ParentViewController.h
ParentViewController.h
#import <UIKit/UIKit.h>
#import "childViewController.h"
@interface ParentViewController : UIViewController<UserResizableViewDelegate,ViewControllerDelegate>
@end
ParentViewController.m
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
这是我如何创建标签
ParentViewController.m
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];
}
和在ChildViewCoontroller中,当用户单击完成按钮然后
and in ChildViewCoontroller when user click done button then
-(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
这篇关于使用委托更改标签文字颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!