Я создал этот тестовый пример как простой пример моей проблемы.
- AppDelegate инициализирует TestViewController и добавляет его в окно
- TestViewController инициализирует TestView и делает его представлением
- TestView инициализирует TestSubView и добавляет его как подпредставление
Моя цель - предоставить TestSubView через делегата доступ к методам и переменным TestViewController. В этом примере TestSubView обращается к методам через touchesBegan или touchesMoved.
Пожалуйста, помогите. Спасибо.
РЕДАКТИРОВАТЬ: по-прежнему не работает, хотя ошибок больше нет. Что я сделал: переместил определение протокола в отдельный файл и импортировал его, сохранил для назначения и удалил объявление @protocol TestDelegate в начале заголовка.
Я думаю, что моя проблема в том, что я не назначаю делегата в TestViewController.m, если это проблема, как бы я это сделал?
TestViewController.h
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController <TestDelegate> {
int number;
}
-(void)assignNumber:(int)value;
-(void)displayNumber;
@property int number;
@end
Перемещено в protocol.h и импортировано, где необходимо
@protocol TestDelegate
-(void)assignNumber:(int)value;
-(void)displayNumber;
@end
TestViewController.m
#import "TestViewController.h"
#import "TestView.h"
@implementation TestViewController
@synthesize number;
- (void)loadView {
TestView *myView = [[TestView alloc] initWithFrame:CGRectMake(0,0,320,480)];
self.view = myView;
[myView release];
}
-(void)assignNumber:(int)value {
NSLog(@"Number Assigned");
number = value;
}
-(void)displayNumber {
NSLog(@"%i",number);
}
TestSubView.h
#import <UIKit/UIKit.h>
#import "TestViewController.h"
@interface TestSubView : UIView {
id<TestDelegate> delegate;
}
@property (nonatomic, retain) id<TestDelegate> delegate;
@end
TestSubView.m
#import "TestSubView.h"
#import "TestViewController.h"
@implementation TestSubView
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
[self setBackgroundColor:[UIColor redColor]];
[self setUserInteractionEnabled:YES];
}
return self;
}
- (void)dealloc {
[super dealloc];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate assignNumber:5];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self.delegate displayNumber];
}