2015-10-05 2 views
3

Мой пользовательский UIView не запускает это для запуска, но другие пользовательские представления я запускаю его. Кто-нибудь знает причину, по которой это автоматическое обновление просмотров будет вызвано? Или Почему «Обновить все представления» выделено серым цветом.Как я могу автоматически обновлять представления для работы?

greyedoutrefreshallviews

код находится здесь: https://github.com/HannahCarney/HCRotaryWheel

+0

Вы используете IBDesignable/IBInspectable? –

+0

Да, я и в этом конкретном случае не будет обновлять просмотры –

ответ

2
  • Убедитесь, что вы IBInspectable свойства для вашего зрения. (например, изменение цвета изображения, просто чтобы убедиться, что ваша IBDesignable вещь работ).

  • Убедитесь, что код вашей настройки на вашем взгляд ого

файл. (на ваш взгляд, метод draw rect).

  • Убедитесь, что вы предоставляете имя владельца файла для IBDesignable зрения. (В раскадровке)
  • Убедитесь, что вы упоминаете IB_DESIGNABLE на вашем .h файл представление.

  • Наконец-то qucik очистит и построит вашу раскадровку, включит опцию Refresh All Refresh.
    .

Пример кода:

для view.h

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 


@interface designalble_UIView : UIView 

@property (nonatomic) IBInspectable UIColor *startColor; 
@property (nonatomic) IBInspectable UIColor *midColor; 
@property (nonatomic) IBInspectable UIColor *endColor; 
@property (nonatomic) IBInspectable NSInteger borderWidth; 
@property (nonatomic) IBInspectable CGFloat cornerRadious; 
@property (nonatomic) IBInspectable BOOL isHorizontal; 


@end 

для view.m

#import "designalble_UIView.h" 

@implementation designalble_UIView 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 

     self.startColor  = [UIColor redColor]; 
     self.midColor  = [UIColor greenColor]; 
     self.endColor  = [UIColor blueColor]; 
     self.borderWidth = 2; 
     self.cornerRadious = 10; 
     self.isHorizontal = NO; 

     [self customInit]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self customInit]; 
    } 
    return self; 
} 


- (void)drawRect:(CGRect)rect { 
    [self customInit]; 
} 

- (void)setNeedsLayout { 
    [super setNeedsLayout]; 
    [self setNeedsDisplay]; 
} 


- (void)prepareForInterfaceBuilder { 

    [self customInit]; 
} 

- (void)customInit { 


    self.layer.cornerRadius = self.cornerRadious; 
    self.layer.borderWidth = self.borderWidth; 

    if (self.cornerRadious > 0) { 
     self.layer.masksToBounds = YES; 
    } 


    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.bounds; 

    gradient.colors = [NSArray arrayWithObjects:(id)[self.startColor CGColor],(id)[self.midColor CGColor], (id)[self.endColor CGColor], nil]; 
    gradient.endPoint = (self.isHorizontal) ? CGPointMake(1, 0) : CGPointMake(0, 1); 
    [self.layer insertSublayer:gradient atIndex:0]; 

} 

enter image description here

+0

Большое спасибо за ваш ответ - к сожалению, мой код включает в себя все эти вещи. Единственный способ, которым я могу заставить эти кнопки не быть серыми, - это если я добавлю другие мои пользовательские представления, удалите их, а затем верните обратно и нажмите «Обновить все представления», но этот пользовательский вид никогда не запускает «Автоматически обновлять представления» ». Поскольку у меня есть значительное количество кода, я не могу публиковать его здесь, но он находится там: https://github.com/HannahCarney/RotaryWheel –

+0

Я посмотрю на него !!! :) –

+0

Спасибо, что так много !! –

1

Решаю d это потому, что я поставил IB_DESIGNABLE в неправильном месте в моем коде:

У меня был протокол в верхней части моего зрения, и ранее он выглядел как

IB_DESIGNABLE 

@protocol RotaryProtocol <NSObject> 

- (void) wheelDidChangeValue:(int)currentSector; 
@end 

@interface HCRotaryWheel : UIView 

@property (weak) id <RotaryProtocol> delegate; 
@property (nonatomic, strong) IBInspectable UIColor* background; 

@end 

Чтобы исправить это, я должен был двигаться IB_DESIGNABLE ниже протокол

@protocol RotaryProtocol <NSObject> 

- (void) wheelDidChangeValue:(int)currentSector; 
@end 

IB_DESIGNABLE 

@interface HCRotaryWheel : UIView 

@property (weak) id <RotaryProtocol> delegate; 
@property (nonatomic, strong) IBInspectable UIColor* background; 

@end 

Теперь мои взгляды обновить !!

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