【问题标题】:ViewController is not updating UIView with custom classViewController 没有使用自定义类更新 UIView
【发布时间】:2013-12-17 06:01:19
【问题描述】:

我不确定我的 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];

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

【问题讨论】:

    标签: ios objective-c uiviewcontroller storyboard


    【解决方案1】:

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

    调用[self.boostGauge SetNeedsDisplay] 后不会产生任何影响,因为: SetNeedsDisplay 调用CICGaugeBuilder Class- (void)drawRect:(CGRect)rect 方法

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

    在这里你再次调用初始化方法和初始化方法将再次将值设置为初始值。 最终没有效果。

    最重要的是,您使用

    调用价值
    CICAppDelegate *ap=(CICAppDelegate *)[[UIApplication sharedApplication]delegate];
    
        ap.guage.value=50;
    

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

    添加关注initialiseGuageMethod

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多