2013-12-17 41 views
2

我不知道如果我有我的視圖控制器在我storyboard文件連接到我的觀點正確,但這裏的設置明細賬 - 我使用xcode 5的ViewController沒有更新的UIView與自定義類

一視圖控制器使用自定義類CICBoostGaugeViewController(在身份檢查器中配置)。 使用自定義類CICGaugeBuilder的一個視圖(在故事板文件中的身份檢查器中配置)。

CICGaugeBuilder類繪製一個標尺,並在init方法中設置標尺的屬性。當我在模擬器中運行此設置時,基於CICGaugeBuilder中初始化的儀表參數,儀表顯示正確。目前沒有問題。

我的問題是,當我在我的視圖控制器創建CICGaugeBuilder類的實例,並設置屬性,他們不顯示,當我在SIM運行它,只有在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]; 

注意,100的maxGaugeNumber被保留時在模擬器中運行。測量儀繪製正確,但問題是未使用視圖控制器中的對象實例。我試過[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

當我經過你應用程序,我發現。

調用[self.boostGauge SetNeedsDisplay]不會做出什麼樣的效果,因爲後: SetNeedsDisplay調用的CICGaugeBuilder Class

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

    [self initializeGauge]; 
} 

在這裏你再次調用初始化方法和初始化方法- (void)drawRect:(CGRect)rect方法將再次設定值初始值。 最終沒有影響。

更重要的是你打電話使用

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

    ap.guage.value=50; 

CICGaugeBuilder Class在appDel一個對象的參考價值。下面以initialiseGuageMethod

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

添加