我創建了這個測試案例作爲我的問題的一個簡單例子。正確實施代表和協議
- 的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