2015-11-01 3 views
0

Я создал пользовательский UIView (ProgressView), где я рисую форму, импортированную с помощью StyleKit из PaintCode.Как изменить переменную пользовательского UIView из ViewController

Ниже приведены коды. Я объявил свойство переменной экземпляра в своем пользовательском UIView, и когда я пытаюсь изменить свойство из ViewController, оно не работает.

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 

* Посмотреть 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

Вы создали новый просмотр прогресса в viewDidLoad, но не добавили его в свою иерархию представлений, чтобы он не был виден. И эта ссылка хранится в локальной переменной, поэтому она будет выпущена, как только эта необходимость выйдет. Если у вас есть другой экземпляр на экране через экран раскадровки, вы должны настроить свойство IBOutlet, чтобы вы могли обновить * тот * экземпляр – Paulw11

+0

Я не уверен на 100%, но я не думаю, что вы можете использовать «новое» в качестве имени переменной , Возможно, ключевое слово в объективе-c, и если я не думаю, что это хорошее имя переменной в любом случае :) – Yan

+0

Нет причин, по которым вы не можете установить значение из метода IBAction. Возможно, покажите этот код. – Paulw11

ответ

1

Вы должны добавить это представление для зрения UIViewController «s:

[self.view addSubview:progressView]; 

Позже, вы должны также установить рамку. Например

[progressView setFrame:self.view.bounds]; 

Вы можете сделать это в методе viewDid/WillLayoutSubviews изменить его вращение/окно изменения размера события.

BTW, не назовите ваше мнение как new, это ужасно. Такое имя даже не говорит, какая именно переменная.

Смежные вопросы