我不确定storyboard文件中的视图控制器是否正确连接到视图,但这是设置的细目-我正在使用xcode 5:

使用自定义类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];

请注意,在模拟器中运行时,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

最佳答案

当我浏览您的应用程序时,我发现了。

调用[self.boostGauge SetNeedsDisplay]后将不会产生任何效果,因为:SetNeedsDisplay调用- (void)drawRect:(CGRect)rectCICGaugeBuilder Class方法


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

    [self initializeGauge];
}

在这里,您再次调用initialize方法,initialize方法将再次将值设置为初始值。
完全没有效果。

最重要的是,您使用
CICAppDelegate *ap=(CICAppDelegate *)[[UIApplication sharedApplication]delegate];

    ap.guage.value=50;

在appDel中获取CICGaugeBuilder Class的对象引用。

initialiseGuageMethod中添加以下内容
  CICAppDelegate *ap=(CICAppDelegate *)[[UIApplication sharedApplication]delegate];
    ap.guage=self;

关于ios - ViewController不使用自定义类更新UIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20627060/

10-13 03:45