2015-06-18 74 views
0

我从一个Nib创建一个自定义的UIView子类(shareView)。 我创建了一个自定义的协议shareView这样的:困惑于委托模式

@protocol sharePopupDelegate 
@required 

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

@end 

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

在我main.storyboard我创建一个自定义的UIViewController myViewController一个名为 “弹出” 内shareView视图实例。

所以现在我

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

我现在想委托myViewControllershareView方法我宣布,所以我也

self.popup.delegate = self; 

内myViewController但协议方法不在myViewController中调用。

因此,我正确地看到shareView实例,但无法连接到它的委托。

你能帮助我吗?

在此先感谢

+0

首先,不要做这个id 委托;使它成为一个弱财产。请发布shareView代码时在其代理上执行委托方法的代码。我正在寻找这样的东西:[self.delegate userPublishedContent]; –

回答

0

请确保您具有在myViewController中声明的协议。

例如

@interface MyViewController : UIViewCOntroller <sharePopupDelegate> 
0

在此部分代码:

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

您正在创建一个强有力的参考代表,这是不是你想要的大部分时间是什么。将其更改为:

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

shareView类本身必须知道用户发布内容的时间。也许你有一个动作链接到shareView,它在shareView类中调用一个方法。对于examaple:

- (void)publishButtonTapped { 
// some code 
} 

你想要做的是让代表知道这个方法,像这样:

- (void)publishButtonTapped { 

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

那么无论操作的用户需要取消:

- (void)cancelButtonTapped { 

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

希望这有助于。

+0

我试过但不幸的是没有解决,我认为问题是关于行:“self.popup.delegate = self”。一种应该被禁止的委托协议的自我分配,但不知道如何解决 – pipizanzibar

+0

我不认为那部分是问题,显示shareView的.m代码。如果你没有[self.delegate userPublishedContent],那可能是问题所在。如果你这样做,设置一个断点,看它是否被击中。 –