Передача объекта от контроллера к представлению
-
19-08-2019 - |
Вопрос
Я слежу за Курсы разработчиков iPhone из Стэнфордского открытого университета, и я был заблокирован на 2 дня на назначение3, может быть, кто-нибудь может мне здесь помочь?
Задачи заключаются в следующем:
- Создайте пользовательский подкласс UIView, который будет отображать ваш объект PolygonShape
- Предоставьте вашему классу view доступ к объекту PolygonShape, чтобы он мог извлекать детали полигона по мере необходимости
Проблема в том, что: как мне предоставить моему классу view доступ к объекту polygon, определенному в моем контроллере?
Вот мои реализации, если это может помочь:
Пользовательский просмотр.h:
#import "PolygonShape.h"
@interface CustomView : UIView {
IBOutlet PolygonShape *polygon;
}
- (NSArray *)pointsForPolygonInRect:(CGRect)rect numberOfSides:(int)numberOfSides;
@end
Контроллер.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
Решение
И после того, как вы разберетесь с этим, возможно, не помешает подправить некоторые основы objective-c.:
Другие советы
Нашел свой собственный ответ, я пропустил метод setPolygon в моем CustomView, чтобы связать оба...глупый...
в Пользовательский просмотр.h:
#import "PolygonShape.h"
@interface CustomView : UIView {
IBOutlet PolygonShape *polygon;
}
@property (readwrite, assign) PolygonShape *polygon;
- (NSArray *)pointsForPolygonInRect:(CGRect)rect numberOfSides:(int)numberOfSides;
@end
в CustomView.m:
@implementation CustomView
@synthesize polygon;
...
@end
в Контроллер.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]);
}
Я только вчера вечером закончил задание 3.Я решил все это соединение в Interface Builder.Сначала я создал выход в подклассе UIView "PolygonView" для PolygonShape, а затем подключил его к экземпляру Polygon model.Из того, что я прочитал в группе Google и на различных других сайтах, я не думаю, что есть один правильный способ подключить этот UIView к модели и контроллеру.Но это сработало, я думаю, нет ничего плохого в том, что View знает о модели.
Так почему же вы не объявляете их как свойства класса?