我有两个视图控制器,ParentViewController
标签已使用SecondViewController
更新。
现在我想从ParentViewController
更改ChildViewController
的标签文字颜色,因为我使用的是协议和委托,但它显示错误。
我的代码是这样的:
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
更新
这就是我创建标签的方式
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中
-(IBAction)doneBtn:(id)sender
{
[adelegate updateLabel];
[self dismissModalViewControllerAnimated:NO];
}
答案 0 :(得分:1)
#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
答案 1 :(得分:0)
您没有设置ChildViewController
的委托属性。您将其设置为ParentViewController
。但是ParentViewController
没有那个属性。
在ChildViewController's
ParentViewController
对象的委托属性
ChildViewController.delegate=self