我有两个通过控制器,一个主VC,然后一个segued VC。在我离开之前,我确保让主人成为受污染的VC的代表。建立了连接。
在隐藏的VC中,有一个触发解雇的按钮(有点像取消按钮)。在segued VC中,我有以下代码:
-(IBAction)deletePill:(id)sender {
[delegate pillInfoViewControllerDidDeletePill:pill];
}
在主VC中,我所拥有的只是:
-(void) pillInfoViewControllerDidDeletePill: (Pill*) pill{
[self dismissViewControllerAnimated:TRUE completion:nil];
}
我在这里缺少什么?
更新以回复评论并添加更多代码
回答问题并提供更多代码(我不想做代码转储)。我不是像模型视图那样呈现这个。用户按下主VC中的按钮以启动推送segue。以下是push segue的代码:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(UICollectionViewCell *)sender{
if([segue.identifier isEqualToString:@"pillInfo"]){
pills=[[NSMutableArray alloc]initWithArray:[[self fetchedResultsController]fetchedObjects]];
Pill* pillSelected =pills[sender.tag];
PillInfoViewController *dest= [segue destinationViewController];
[dest setPill:pillSelected];
[dest setDelegate:self];
}
答案 0 :(得分:1)
在解除显示的视图控制器时,无法调用呈现视图控制器的操作。为此,您可以按如下方式使用NSNotificationCenter:
-(IBAction)deletePill:(id)sender {
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationName" object:nil];
}
现在在主视图控制器中,在ViewDidLoad中添加以下代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pillInfoViewControllerDidDeletePill)
name:@"NotificationName" object:nil];
答案 1 :(得分:0)
方法
-(void) pillInfoViewControllerDidDeletePill: (Pill*) pill
应该是协议的一部分,例如:
@protocol VCDismissingProtocol
@optional
-(void) pillInfoViewControllerDidDeletePill: (Pill*) pill;
@end
确保您已声明主视图控制器实现该协议:
@interface MasterViewController : UIViewController<VCDismissingProtocol>{
...
}
@end
并且segued视图控制器声明了一个委托属性,如:
@property (weak,nonatomic) id <VCDismissingProtocol> delegate;