我有一个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];

}

08-05 22:55