对代表模式感到困惑

时间:2015-06-18 17:21:10

标签: ios objective-c delegates storyboard subclass

我正在从Nib创建自定义UIView子类( shareView )。 我为 shareView 创建了一个自定义协议,如下所示:

@protocol sharePopupDelegate
@required

-(void)userPublishedContent;
-(void)userAbortedPublish;

@end

@interface shareView : UIView
{
     id<sharePopupDelegate> delegate;
}    

在我的main.storyboard中,我创建了一个自定义的UIViewController myViewController ,其中包含 shareView 视图实例,名为&#34; popup &#34;内部。

所以现在我得到了

@property (weak, nonatomic) IBOutlet shareView *popup;

我现在想从我声明的 shareView 方法委派 myViewController ,所以我做了

self.popup.delegate = self;

在myViewController中,但协议&#39; myViewController中没有调用方法。

所以我正确地看到 shareView 实例,但无法与其委托进行交互。

你能帮帮我吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

确保您在myViewController中声明了协议。

例如

   @interface MyViewController : UIViewCOntroller <sharePopupDelegate>

答案 1 :(得分:0)

在代码的这一部分:

@interface shareView : UIView
{
     id<sharePopupDelegate> delegate;
}   

您正在创建对委托的强引用,这不是您大多数时候想要的。将其更改为:

@interface shareView : UIView
@property(weak, nonatomic) id<sharePopupDelegate> delegate;

shareView类本身必须有一些方法来了解用户何时发布内容。也许你有一个动作链接到shareView,它调用shareView类中的方法。例如:

- (void)publishButtonTapped {
// some code
}

您要做的是让代理人知道该方法,如下所示:

- (void)publishButtonTapped {

// some code
[self.delegate userPublishedContent];
}

然后用户取消的任何操作:

- (void)cancelButtonTapped {

// some code
[self.delegate userAbortedPublish];
}

希望这有帮助。