2013-12-17 3 views
2

Я не уверен, если у меня есть вид контроллер в моем storyboard файле, подключенного к моему правильно, но вот разбивка настройки - я использую xcode 5:ViewController не обновляется UIView с пользовательским классом

One диспетчер просмотра с использованием настраиваемого класса CICBoostGaugeViewController (настроен в инспекторе идентификации). Один вид с использованием пользовательского класса CICGaugeBuilder (настроен в инспекторе идентификации в файле раскадровки).

Класс CICGaugeBuilder рисует датчик и задает свойства датчика в методе init. Когда я запускаю эту настройку в симуляторе, датчик отображается правильно на основе параметров инициализированного датчика в CICGaugeBuilder. На данный момент проблем нет.

Мой вопрос, когда я создаю экземпляр класса CICGaugeBuilder на мой взгляд, контроллер и установить свойства, они не появляются, когда я запускаю его в сим, только значения инициализируются в CICGaugeBuilder классе применяются.

CICBoostGaugeViewController.h

#import <UIKit/UIKit.h> 
#import "CICGaugeBuilder.h" 

@class CICGaugeBuilder; 

@interface CICBoostGaugeViewController : UIViewController{ 
    CICGaugeBuilder *boostGauge; 
} 

@property (nonatomic, retain) IBOutlet CICGaugeBuilder *boostGauge; 


@end 

CICBoostGaugeViewController.m

#import "CICBoostGaugeViewController.h" 
#import "CICGaugeBuilder.h" 


@interface CICBoostGaugeViewController() 

@end 

@implementation CICBoostGaugeViewController 

@synthesize boostGauge; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.boostGauge.minGaugeNumber = 0; 
    self.boostGauge.maxGaugeNumber = 25; 
    self.boostGauge.gaugeLabel = @"Boost/Vac"; 
    self.boostGauge.incrementPerLargeTick = 10; 
    self.boostGauge.tickStartAngleDegrees = 135; 
    self.boostGauge.tickDistance = 270; 
    self.boostGauge.menuItemsFont = [UIFont fontWithName:@"Helvetica" size:14]; 
    self.boostGauge.value = 10; 

} 

- (void)viewDidUnload 
{ 
    //self.boostGauge = nil; 
} 

- (void)didReceiveMemoryWarning 
{ 

    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

Это метод инициализации в классе CICGaugeBuilder:

self.minGaugeNumber = 0; 
self.maxGaugeNumber = 100; 
self.gaugeType = 2; 
self.gaugeLabel = @"Boost/Vac"; 
self.incrementPerLargeTick = 10; 
self.tickStartAngleDegrees = 135; 
self.tickDistance = 270; 
self.menuItemsFont = [UIFont fontWithName:@"Helvetica" size:14]; 

Обратите внимание, что maxGaugeNumber 100 сохраняется при запустить в симуляторе. Манометр рисует правильно, но проблема в том, что экземпляр объекта в контроллере представления не используется. Я пробовал [self.boostGauge SetNeedsDisplay], и это не сработало.

В моем файле раскадровки контроллер представления не имеет каких-либо ссылочных точек. Я думаю, что это должно быть связано с делегатом приложения, но я не уверен. Dragging диспетчер представлений для делегата приложения не разрешает соединение.

Вот файл CICAppDelegate.h:

#import <UIKit/UIKit.h> 

@class CICBoostGaugeViewController; 

@interface CICAppDelegate : UIResponder <UIApplicationDelegate>{ 
    UIWindow *window; 
    CICBoostGaugeViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet CICBoostGaugeViewController *viewController; 

@end 

ответ

1

Как я иду через вас App, я нашел.

После вызова [self.boostGauge SetNeedsDisplay] не будет делать какой-либо эффект, потому что: SetNeedsDisplay вызывает - (void)drawRect:(CGRect)rect метода CICGaugeBuilder Class

и

- (void)drawRect:(CGRect)rect 
{ 
    CGRect innerFrame; 
    // self.value = 0; 

    [self initializeGauge]; 
} 

здесь вы снова вызывающая инициализацию метода и инициализируют метод снова установит значение Начальное значение. УДЛИНЕННЫЙ НЕТ ЭФФЕКТА.

Самое главное вы вызываете значение с помощью

CICAppDelegate *ap=(CICAppDelegate *)[[UIApplication sharedApplication]delegate]; 

    ap.guage.value=50; 

Возьмите ссылку на объект из CICGaugeBuilder Class в appDel.

Добавить следующее initialiseGuageMethod

CICAppDelegate *ap=(CICAppDelegate *)[[UIApplication sharedApplication]delegate]; 
    ap.guage=self; 
Смежные вопросы