我创建了这个测试案例作为我的问题的一个简单例子。正确实施代表和协议
- 的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];
}
当你声明在协议的方法,你并不需要再次声明的方法在符合协议的类中。 (的确,你不应该这样做,因为如果你改变一个而不改变另一个,那么这会导致错配错误。)另外,为什么'assignNumber:'?我建议在协议中声明属性。 – 2010-11-21 23:35:05
你可以添加你的TestView类吗?这就是缺少的胶水,可能是你的问题所在。 – Rudiger 2010-11-22 00:13:21
是TestSubView意味着TestView? – Ben 2012-02-12 14:04:38