2012-03-16 64 views
1

如何声明和实现将返回视图属性的协议? 例如我有一个名为mainView的视图,我希望它能够在另一个视图(例如customView)询问它时返回数组。 我在做什么是我在mainView实现文件中声明了一个协议(带有一个returnTheArray函数),并将customView设置为采用此协议,但我坚持了这一点。我该怎么做才能正确地工作?或者有更有效/简单/正确的方法来做到这一点?谢谢。通过协议在两个视图控制器之间传递数据

+0

呃.. UIViewController? – meggar 2012-03-16 17:27:56

+0

是的。从UIViewController到UITableViewController – nemesis 2012-03-16 17:30:35

+0

我不明白为什么你需要一个协议,如果viewcontrollers互相引用,你可以只添加一个方法。 – meggar 2012-03-16 17:35:24

回答

2

协议本身只是函数/方法名称,参数和返回值的声明。作为一个协议,只有当它被许多类实现时,我个人更喜欢在一个单独的头文件protocolName.h中声明它。

符合协议的每个类都需要实现该方法。对我来说,它是如此简单。

AClass.h

@itnerface ACLASS:NSObject的{ //一些性质 } // @property语句 @end

AClass.m

#include "BClass.h" 

@implementation AClass 

//@synthesize statements; 

- (void) aFunctionFetchingTheArray { 

    BClass *bClass = [[BClass alloc] initWithSomething:kParameter]; 

    NSArray *anArray = [bClass returnTheArray]; 

    //Do something with it 

} 

@end 

MyProtocol.h

@protocol MyProtocol 

- (NSArray *) returnTheArray; 

@end 

BClass.h

#include "MyProtocol.h" 

@interface BClass <MyProtocol> { 
// some properties in interface 
} 
// some @property 
// some methods 
@end 

BClass.m

#include "BClass.h" //No need to include MyProtocol.h here too, in this case 

- (NSArray *) returnTheArray { 
return [NSArray arrayWithObjects:@"A", [NSNumber numberWithtInt:1], [UIColor clearColor], somethingElse, evenMore, nil]; 
} 

// more methods 

@end 

请纠正我,如果我错过了或者拼错了重要的东西。

+0

值得一提的是委托方法的名称约定(BClass遵循的协议中的方法通过)。看看这个:http://cocoawithlove.com/2009/06/method-names-in-objective-c.html – 2012-03-16 18:44:47

+0

谢谢!我会牢记这一点! – nemesis 2012-03-16 20:39:37

+0

你是什么意思initWithSomething?我如何告诉AClass BClass * bClass是控制器BClass,而不仅仅是一些空的控制器? – nemesis 2012-03-16 21:19:40

相关问题