我大部分时间都这样做:
self.someVC = [myVC alloc] initWithFrame:frame];
self.someVC.delegate = self;
有没有办法自动设置委托变量?
-(void)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.delegate = [the object that is calling initWithFrame];
..
答案 0 :(得分:1)
不,这是不可能的。你必须检查调用堆栈或我不推荐的东西。没有标准设施。
即使有可能,也不是一个好主意。您应该像往常一样使用构造函数或属性注入,因此依赖关系是明确的,并且您不会混淆正在阅读代码的人。
答案 1 :(得分:0)
添加一个自定义初始值设定项,将委托对象作为参数。
像这样:
-(void)initWithFrame:(CGRect)frame delegate:(id)delegate
{
self = [super initWithFrame:frame];
if (self) {
self.delegate = delegate;
..
答案 2 :(得分:0)
您始终可以提供新的initWithFrame方法:
- (id)initWithFrame:(CGRect) aFrame delegate:(id)aDelegate {
self = [super initWithFrame:aFrame];
if (self) {
self.delegate = aDelegate;
}
return self;
}