我遇到这个问题,当我点击右边最后一个VC的表格单元格时,我想隐藏父VC的容器视图。
我尝试连接协议代理,但它没有用。
这是我失败的尝试:
我在GOCategoryMenuViewController上添加了协议。
@protocol GOCategoryMenuViewControllerDelegate <NSObject>
-(void)hideMenu;
@end
@interface GOCategoryMenuViewController : UIViewController
@property(weak, nonatomic) id <GOCategoryMenuViewControllerDelegate> delegate;
@end
在.m文件中实现hideMenu
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate hideMenu];
}
将标头和委托导入parentVC
#import "GOCategoryMenuViewController.h"
@interface ViewController : UIViewController<GOCategoryMenuViewControllerDelegate>
在ParentVC的.m中实现hideMenu
-(void)hideMenu
{
NSLog(@"Hide the menu");
}
我相信我还需要在代表身上宣布自我,但我不知道我是如何尝试在网上搜索解决方案无济于事的。这就是为什么我现在直接问你们所有人。请帮助和谢谢!
答案 0 :(得分:0)
如果只想使用委托来解决它,则必须将父视图控制器控件委托传递给子视图控制器,并在子视图控制器中声明与父控件具有相同类型的属性。
然后,您可以在子视图控制器中对父视图的控件执行任何操作。
ParentViewController.h类
@interface ParentViewController : UIViewController
{
NSMutableDictionary *dictOfPeople;
}
@property(nonatomic, retain) NSMutableDictionary *dictOfPeople;
ParentViewController.m类
@synthesize dictOfPeople;
- (void)anyMethod
{
//initialize child view controller
ChildViewController *childViewController = [[ChildViewController alloc] init];
// here is important
childViewController.owner = self;
}
ChildViewController.h类
@interface ChildViewController : UIViewController
{
id owner;
}
@property(nonatomic, assign) id owner;
ChildViewController.m类
@synthesize owner;
- (void)anyMethod
{
// You can access parent view controllers dictOfPeople dictionary like this
int totalNum = [((ParentViewController *)self.owner).dictOfPeople count];
//...
}
答案 1 :(得分:0)
你的协议是真的,你唯一需要做的就是当你初始化GOCategoryMenuViewController的实例时,你应该给它一个代表......这样:
GOCategoryMenuViewController *category = [[GOCategoryMenuViewController alloc] init];
//if you don't give delegate, never your delegate method will get called
category.delegate = self;
您必须委托您的GOCategoryMenuViewController类的实例。