我不确定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)rect
的CICGaugeBuilder 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/