Programmgesteuert erstellen-Ansichten in IOS (wie funktioniert es)?

Ein wenig hintergrund: ich fahre über die CS193P iTune videos und ich saß auf der Aufgabe 3 für die längste Zeit. Grundsätzlich gilt, die Zuordnung fragt Sie programmgesteuert erstellen Sie eine benutzerdefinierte Ansicht anzeigen, um eine Form auf dem Bildschirm. Ich bin nicht mit jedem view-Controller, die durch die Art und Weise.

Ich konnte nicht meine Anzeige, bis ich schließlich schleppte ein View-Objekt im Interface Builder, und ändern Sie den Objektnamen, um meine eigene view-Klasse. Also meine Frage ist, wenn Leute sagen, Sie programmgesteuert erstellen Sie einen Blick, sind Sie nur zu sagen, erstellen Sie manuell die Klasse, aber wenn Sie brauchen, um ihn anzuzeigen, verwenden Sie IB? Ich kann mir nicht helfen Gefühl, wie ich etwas missverstanden?

edit: lassen Sie mich klarer sein. Meine benutzerdefinierte Ansicht initialisiert wurde mit einem Rahmen von 0, 0, 200, 150 und drawRect ist überschrieben um ein Quadrat zu zeichnen. Meiner Ansicht gar nicht angezeigt, wenn versuchen Sie es, um das Hauptfenster in meinem controller:

    UIWindow* window = [UIApplication sharedApplication].keyWindow;
[window addSubview:polygonView];

Jedoch, wenn die drag ein Blick in IB und ändern Sie die Klasse, um meine view-Klasse, es zeigt sich gut.

Edit: Hinzugefügt einige code. Dies ist mein controller-s awakeFromNib-Methode, wo die Sicht gezogen werden sollten.

    - (void)awakeFromNib {
    shape = [[PolygonShape alloc] initWithNumberOfSides:numberOfSidesLable.text.integerValue minimumNumberOfSides:3 maximumNumberOfSides:12];
    polygonView = [[PolygonView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    polygonView.backgroundColor = [UIColor blackColor];
    [window addSubview:polygonView];
    [self updateInterface];  
}

Teil meines Controllers updateInterface Methode:

- (void)updateInterface {
    [polygonView setPolygon:shape];
    [polygonView setNeedsDisplay];
...
}

PolygonView.h

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

@interface PolygonView : UIView {
    IBOutlet PolygonShape *polygon; 
}

@property (readwrite, assign) PolygonShape *polygon;

- (void)drawRect:(CGRect)rect;
@end

PolygonView.m

#import "PolygonView.h"

@implementation PolygonView
@synthesize polygon;

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        nslog(@"initialized");
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
       CGRect bounds = [self bounds];

    [[UIColor grayColor] set];
    UIRectFill(bounds);

    CGRect square = CGRectMake(10, 10, 10, 100);
    [[UIColor blackColor] set];
    UIRectFill(square);

    [[UIColor redColor] set];
    UIRectFill(square);
    NSLog(@"drawRect called");
}
@end

Den polygonView ist initialisiert aber die drawRect nicht genannt.

InformationsquelleAutor der Frage subject_x | 2011-01-27

Schreibe einen Kommentar