Pasar objeto del controlador a una vista
-
19-08-2019 - |
Pregunta
Estoy siguiendo cursos de desarrollo para iPhone de Stanford Open-University, y he estado bloqueado durante 2 días en task3 , tal vez alguien me puede ayudar aquí?
Las tareas son:
- Cree una subclase de UIView personalizada que muestre su objeto PolygonShape
- Otorgue acceso a su clase de vista al objeto PolygonShape para que pueda recuperar los detalles del polígono según sea necesario
El problema es: ¿cómo le doy acceso a mi clase de vista al objeto de polígono definido en mi controlador?
Aquí están mis implementaciones si pueden ayudar:
CustomView.h:
#import "PolygonShape.h"
@interface CustomView : UIView {
IBOutlet PolygonShape *polygon;
}
- (NSArray *)pointsForPolygonInRect:(CGRect)rect numberOfSides:(int)numberOfSides;
@end
Controller.h:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "PolygonShape.h"
#import "PolygonView.h"
@interface Controller : NSObject {
IBOutlet UIButton *decreaseButton;
IBOutlet UIButton *increaseButton;
IBOutlet UILabel *numberOfSidesLabel;
IBOutlet PolygonShape *polygon;
IBOutlet PolygonView *polygonView;
}
- (IBAction)decrease;
- (IBAction)increase;
- (void)awakeFromNib;
- (void)updateInterface;
@end
Solución
Y después de que lo descubras, podría no estar de más retocar algunos conceptos básicos del objetivo c:
Otros consejos
Encontré mi propia respuesta, me perdí un método setPolygon en mi CustomView para vincular ambos ... estúpido ...
en CustomView.h :
#import "PolygonShape.h"
@interface CustomView : UIView {
IBOutlet PolygonShape *polygon;
}
@property (readwrite, assign) PolygonShape *polygon;
- (NSArray *)pointsForPolygonInRect:(CGRect)rect numberOfSides:(int)numberOfSides;
@end
en CustomView.m:
@implementation CustomView
@synthesize polygon;
...
@end
en Controller.m :
- (void)awakeFromNib {
// configure your polygon here
polygon = [[PolygonShape alloc] initWithNumberOfSides:numberOfSidesLabel.text.integerValue minimumNumberOfSides:3 maximumNumberOfSides:12];
[polygonView setPolygon:polygon];
NSLog (@"My polygon: %@", [polygon description]);
}
Acabo de terminar la tarea 3 anoche. Resolví esta conexión todo en Interface Builder. Primero creé una salida en el "PolygonView" UIView subclase para PolygonShape y luego lo conectó a la instancia del modelo Polygon. Por lo que he leído en el Grupo de Google y en varios otros sitios, no creo que haya una manera correcta de conectar esta UIView al modelo y al controlador. Pero funcionó, creo que no hay nada de malo en que View conozca el modelo.
Entonces, ¿por qué no los declaras como propiedades de la clase?