我有一个UIView类,它作为子视图加载到UIViewController中,以捕获触摸并将其绘制到屏幕上(一个简单的绘制应用程序)。我想在绘图开始时在UIViewController中隐藏一些按钮。在UIViewController(DrawingController.m)的viewDidLoad方法中:
//init the draw screen
drawScreen=[[MyLineDrawingView alloc]initWithFrame:self.view.bounds];
[drawScreen setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:drawScreen];
我在UIViewController(DrawingController.m)中有一个方法,该方法隐藏了UIViewController中存在的颜色选择器,画笔大小按钮等。当从同一类(DrawingController.m)调用hide方法时,它可以正常工作。基本上,当在UIView类(MyLineDrawingView.m)中调用-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event方法时,我希望隐藏按钮:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
DrawingController *drawController = [[DrawingController alloc] init];
[drawController hideDrawIcons];
}
我在UIViewController中的hideDrawIcons方法中添加了一些日志记录,并且该日志记录被调用,但是我所有的隐藏代码都无法正常工作:
self.undoBtn.hidden = YES;
我怀疑这是因为我正在使用DrawingController * drawController = [[DrawingController alloc] init]创建UIViewController类的新实例。 -但我不确定该如何做事吗?
我当然已经在DrawingController.h头文件中公开了正确的方法,以便能够从UIView类(MyLineDrawingView.m)调用它:
-(void)hideDrawIcons;
希望所有这些都有意义,在此先感谢!
最佳答案
你是对的。您无需创建DrawingController的新实例。
您所需要的只是在View类中具有DrawingController的指针。如果您想了解更多有关该技术的知识,可以阅读有关代理模式的信息。如果没有,这是简单的步骤。
在MyLineDrawingView.h文件中添加协议(或者您可以为其创建单独的文件)
@protocol MyLineDrawingProtocol <NSObject>
-(void)hideDrawIcons;
@end
在您的DrawingController.h中
@interface DrawingController <MyLineDrawingProtocol>
{
// members ....
}
@end
在您的MyLineDrawingView.h中
@interface MyLineDrawingView
{
// members ....
}
@property (nonatomic,weak) id <MyLineDrawingProtocol> delegate;
@end
为您的视图设置委托
//init the draw screen
drawScreen=[[MyLineDrawingView alloc]initWithFrame:self.view.bounds];
drawScreen.delegate = self;// self is a pointer of DrawingController
[drawScreen setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:drawScreen];
最后的改变。为委托调用hideDrawIcons方法(DrawingController)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ( [self.delegate respondsToSelector:@selector(hideDrawIcons)] )
[self.delegate hideDrawIcons];
}