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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um noch genauer zu sein auf Ihre Frage, die syntax wäre
Dies ist ein Muster, das Sie verwenden werden, für die nicht nur diese, sondern-Untersichten werden danach. Auch ein weiterer Hinweis: bei vielen Vorlagen, die viewController bereits eingerichtet ist, mit seiner eigenen Ansicht. Wenn Sie möchten, um eine benutzerdefinierte Ansicht erstellen Sie es wie oben, aber statt der oben genannten Methode legen Sie die viewControllers Blick auf die neu angelegte Ansicht etwa so:
Glück!
InformationsquelleAutor der Antwort SushiGrass Jacob
Dies ist eine alte Frage, aber ich bin mir nicht sicher, bekam er die Antwort die er erwartet - es klingt wie er lief in das gleiche problem habe ich, wenn ich erstellte eine
UIViewController
Unterklasse, verprügelte einUIViewController
im interface builder nib, aber dann konnte nicht herausfinden, wie man die beiden miteinander arbeiten.Wenn Sie aus der Feder separat (also es war nicht für Sie gemacht, neben Ihrer Klasse), dann Sie daran denken müssen, klicken Sie auf die UIViewController, die Sie im interface builder, und dann aus der Eigenschaften-Palette klicken Sie auf die Dritte tab-Taste ('Custom Class'). Die
Class
wird der Standard-Basis-KlasseUIViewController
etc - öffnen Sie einfach die dropdown-Liste, und Sie sehen eine Liste aller benutzerdefinierten Unterklassen, wählen Sie es aus und volla - die du verlinkt hast Ihr benutzerdefiniertes element der Benutzeroberfläche.Hoffe, das spart jemand, der Tage dauerte es, um herauszufinden, fand ich etwas blöd wunderbare Möglichkeiten, sich um ihn herum, bis ich bemerkte, dass die einfache Lösung.
InformationsquelleAutor der Antwort RoyalFool
Müssen Sie eine Ansicht (oder das Fenster), um eine Untersicht auf. Die normale syntax ist wie folgt:
Natürlich, wenn Sie ein benutzerdefiniertes Objekt, das erbt von UIView, die Sie verwenden würden, anstelle von UIView. Wenn Sie ein neues Projekt beginnen, erstellen Sie eine "View-based application", das wird Ihnen den start mit einem view-controller mit zugeordneten anzeigen (erreichbar mit "CustomViewController.view", die ersetzen würde "mainView" in das code-snippet oben).
Wenn Sie eine Ansicht erstellen möchten programmgesteuert, wenn die app gestartet wird, setzen Sie den code in die "- (void)viewDidLoad" - Methode Ihres view-Controllers.
InformationsquelleAutor der Antwort Ned
hi fügen Sie einfach diesen code,
InformationsquelleAutor der Antwort Saad Tasawar
Irgendwo in Ihrem aktiven controller-Klasse, können Sie eine benutzerdefinierte Ansicht auf die aktuelle top-level-Sicht.
Hilft es, zu reservieren und initialisieren Sie diese benutzerdefinierte Ansicht zuerst.
Dann können Sie auslösen, eine Zeichnung in dieser benutzerdefinierten Ansicht drawRect durch eine:
InformationsquelleAutor der Antwort hotpaw2
Haben Sie die Hintergrundfarbe der Ansicht zu etwas unterscheidbar?
Sind Sie sicher, dass Ihre anzeigen nicht angezeigt, oder ist es nur, dass Sie es nicht sehen können? Setzen Sie ein NSLog in die drawRect: - Methode der view (wenn Sie verwenden eine benutzerdefinierte view-Klasse).
InformationsquelleAutor der Antwort fzwo
Ich hatte ein sehr ähnliches problem vor kurzem, und hier ist was für mich gearbeitet:
Es scheint, dass beim starten mit einem "empty application" in Xcode 4.3.2, die Sie haben, um Ihre Sicht der root-Ansicht-Hauptfenster mit der setRootViewController-Methode anstelle von addSubview. Also:
Danach können Sie die Methode addSubview, um zusätzliche Ansichten.
InformationsquelleAutor der Antwort Matjan
call
bevor Sie Ihre benutzerdefinierten code in drawRect: Körper.
InformationsquelleAutor der Antwort DaddyM