Question

J'utilise le toolchain iPhone sur Linux et je n'ai pas Interface Builder. Alors, comment pourrais-je mise en page mon point de vue dans ma sous-classe ViewController? Par exemple, je veux un UITextView au milieu de l'écran? Dois-je faire cela dans le loadView ou viewDidLoad. Dois-je aussi définir la vue de la sous-classe ViewController à lui-même?

Était-ce utile?

La solution

Il est pas une tâche facile à la mise en page tout le point de vue en utilisant le code. Voici un code:

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake (100, 100, 100, 100)];
[self.view addSubview:textView];

Le cadre est le lieu (le premier et le second argument est x et y coordinateur) et la taille (le troisième et le quatrième paramètre est la largeur et la hauteur de l'affichage de texte).

En utilisant cette façon, vous pouvez ajouter une vue dans votre classe. Une partie de la vue est construite et vous ne devez pas vous en tirer, certains d'entre eux n'est pas, et vous devez sous-classe UIView et passer outre drawRect.

Vous devriez le faire en viewDidLoad lorsque votre contrôleur principal de vue est terminé le chargement

Autres conseils

J'ai écrit un projet open source qui fait exactement ceci:

https://github.com/charlesmchen/WeViews

Voici un autre projet que vous pourriez trouver utiles:

http://code.google.com/p/layoutmanagers/

Je construis généralement toute la hiérarchie de vue dans la méthode de loadview et de réaliser la configuration supplémentaire dans le viewDidLoad, par exemple pour mettre en place le contenu de sous-vues pour refléter les données associées au contrôleur de vue. L'important est de définir le contrôleur de vue vue sortie dans la méthode loadview.

@synthesize label; // @property(nonatomic,retain) UILabel *label declared in the interface.

-(void)loadView {

// Origin's y is 20 to take the status bar into account, height is 460 for the very same reason.
UIView *aView = [[UIView alloc]initWithFrame:CGRectMake(0,20,320,460)];
[aView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
[aView setAutoresizeSubviews:YES];

// The 150x50 label will appear in the middle of the view. 
UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake((320-150)/2,(460-50)/250,150,50)];

// Label will maintain the distance from the bottom and right margin upon rotation.
[aLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin];

// Add the label to the view hiearchy.
[self setLabel:aLabel];
[aView addSubview:aLabel];

// Set aView outlet to be the outlet for this view controller. This is critical.
[self setView:aView];

// Cleanup.
[aLabel release];
[aView release];
}

-(void)viewDidLoad {

// Additional and conditional setup.

// labelText is an istance variable that hold the current text for the label. This way, if you
// change the label text at runtime, you will be able to restore its value if the view has been
// unloaded because of a memory warning.
NSString *text = [self labelText];
[label setText:text];

}

-(void)viewDidUnload {

// The superclass implementation will release the view outlet.
[super viewDidUnload];

// Set the label to nil.
[self setLabel:nil];
}

La plus grande difficulté est probablement comprendre comment la carte de IB aux variables et méthodes UIView, par exemple le masque de redimensionnement automatique. Les références de classe UIView et UIViewController d'Apple sont pleins d'informations utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top