我创建了一个UIView的子类,它是一个旋转轮。这个轮子是另一个UIView的一部分,它在右上角有一个图像。 转动滚轮时,在touchMoved功能中返回最右侧的项目(其编号)。我需要在转动子视图时自动更改父图像(当返回数字时)
假设我在子视图中有这个号码,我该如何将其返回到父视图,或者从子视图中更改图像(在父UIView中)?
由于
答案 0 :(得分:1)
首先,创建一个协议,定义要在superview中调用的方法:
@protocol wheelViewDelegate {
-(void)doSomething;
}
您的超级视图需要实施此协议:
@interface superView:UIView<wheelViewDelegate> {
...
}
...
@end
此外,您显然需要实施doSomething
方法。
包含方向盘的UIView需要是UIView的子类并保存委托,如下所示:
@interface WheelView : UIView {
id<wheelViewDelegate> delegate;
...
}
@propery (nonatomic, assign) id<wheelViewDelegate> delegate;
...
@end
不要忘记在实施中@synthesize id;
。
现在,您可以从子视图中调用超级视图中的doSomething
:
[self.delegate doSomething];
编辑:
好的,我认为这很明显,但是,当然,您需要像这样设置委托:
//In your superView:
WheelView* wv = [WheelView initSomeHow];
wv.delegate = self;
答案 1 :(得分:1)
Phlibbo 提到的委托方法是一种方法。由于您的自定义视图子类更像是带有值的控件,因此我将继承UIControl
而不是UIView
并使用UIControlEventValueChanged
事件。
在您的自定义子类中,通知值已更改(可能在您的touchedEnded:withEvent:
中):
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
现在观察控制器中的值变化,让控制器在另一个视图中更新图像。
- (void) viewDidLoad {
[wheelControl addTarget:self action:@selector(wheelValueChanged:) forControlEvents:UIControlEventValueChanged];
}
- (void) wheelValueChanged:(id)sender {
// update your image based on the wheel value of sender (wheelControl in this case).
}