繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM