2015-11-01 1 views
0

J'ai créé un UIView personnalisé (ProgressView) où je dessine une forme importée via StyleKit à partir de PaintCode.Comment faire pour modifier la variable de UIView personnalisé de ViewController

Voici les codes. J'ai déclaré la propriété de variable d'instance dans mon UIView personnalisé et quand j'essaye de changer la propriété de ViewController, cela ne fonctionne pas.

ProgressView.h

#import <UIKit/UIKit.h> 

@interface ProogressView : UIView 

@property (nonatomic) float daysFraction; 
@property (nonatomic) float pagesFraction; 


@end 

ProgressView.m

#import "ProgressView.h" 
#import "StyleKitName.h" 
#import "ViewController.h" 

@implementation ProgressView 
@synthesize daysFraction = _daysFraction; 
@synthesize pagesFraction = _pagesFraction; 


- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    [StyleKitName drawCanvas1WithDaysFraction:self.daysFraction pageFraction:self.pagesFraction]; 
} 


-(void)awakeFromNib { 
    [super awakeFromNib]; 
    self.pagesFraction = 0; 
    self.daysFraction = 0; 
} 

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@end 

* Voir Controller.m **

#import "ViewController.h" 
#import "ButtonAnimation.h" 
#import "ProgressView.h" 
#import "StyleKitName.h" 

@interface ViewController() 

@property (weak, nonatomic) IBOutlet ButtonAnimation *buttonView; 
@property (weak, nonatomic) IBOutlet UIButton *actionButton; 

@end 


@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ProgressView *new =[[ ProgressView alloc]init]; 
    new.daysFraction = 0.7f; // here I am setting value to variable in custom view ProgressView but not working. 

} 

- (IBAction)animateTheButton:(id)sender { 
    self.buttonView.layer.backgroundColor = [UIColor clearColor].CGColor; 
    [self.buttonView addErrorAnimation]; 

} 


@end 
+2

Vous avez créé une nouvelle vue de progression dans viewDidLoad mais vous ne l'avez pas ajoutée à votre hiérarchie de vue afin qu'elle ne soit pas visible. Et la référence est stockée dans une variable locale afin qu'elle soit libérée dès que ce besoin se termine. Si vous avez une autre instance à l'écran via votre écran de storyboard, vous devez configurer une propriété IBOutlet pour pouvoir mettre à jour * cette * instance – Paulw11

+0

Je ne suis pas sûr à 100% mais je ne pense pas que vous pouvez utiliser "new" comme nom de variable . C'est possible un mot-clé dans l'objectif-c et sinon je ne pense pas que c'est un bon nom de variable dans tous les cas :) – Yan

+0

Il n'y a aucune raison pour laquelle vous ne pouvez pas définir la valeur d'une méthode IBAction. Peut-être montrer ce code. – Paulw11

Répondre

1

Vous devez ajouter ce point de vue à la vue de UIViewController:

[self.view addSubview:progressView]; 

Plus tard, vous devez également définir un cadre. Par exemple,

[progressView setFrame:self.view.bounds]; 

Vous pouvez le faire dans la méthode viewDid/WillLayoutSubviews pour changer la rotation/fenêtre redimensionne événement.

BTW, ne nommez pas votre vue comme new, c'est horrible. Un tel nom ne dit même pas quel genre de variable est-ce.