我的UIView的子类处理触摸事件并在触摸开始和跟踪发生时更新内部值.
我的视图控制器在屏幕上加载此自定义视图.设置我的视图控制器以监听自定义控件的值更改的最佳方法是什么?
您可以:
在您的控制器中实现委托方法,并从您的视图中调用它们,或
UIControl
改为子类并将UIControlEvent
s 发送给您的控制器
当值改变时(或者更确切地说当用户与您的控件交互时).
如果您的视图用于从用户那里获得某种形式的输入,那么子类化UIControl
是一种更好的方法.
来自iPhone参考库:
UIControl
是控件的基类:按钮和滑块等对象,用于将用户意图传达给应用程序.
所以之间最重要的区别UIView
,并UIControl
为用户意图是否传送与否.UIView
用于显示信息,同时UIControl
用于收集用户输入.
更新:
如果您决定使用委托模式,那么代码的外观如下:
在自定义视图的界面中,像这样定义委托:
@interface MyView : UIView { id delegate; } @property (assign) id delegate; @end
并且@synthesize
它在执行.
在视图控制器中,将控制器设置为委托:
MyView myView = [[MyView alloc] init]; [myView setDelegate:self];
然后,只要用户与视图交互(例如,在touchesBegan
),可能更改值,请在视图中执行以下操作:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // Possibly change the values if([delegate respondsToSelector:@selector(valuesChanged)]) { [delegate valuesChanged]; } }
您可能还想查看Cocoa基础指南中的代理和数据源.