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

时间:2012-11-19 12:41:17

标签: iphone ios delegates protocols

我有两个视图控制器,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];

}

2 个答案:

答案 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