![](/img/trans.png)
[英]How to remove subviews from UITabbarcontroller view using objective-c
[英]Retrieving values from subviews Objective-c
我创建了一个UIView的子类,它是一个旋转轮。 这个轮子是另一个UIView的一部分,它在右上角有一个图像。 转动滚轮时,在touchMoved功能中返回最右侧的项目(其编号)。 我需要在转动子视图时自动更改父图像(返回数字时)
假设我在子视图中有这个数字,我怎么能将它返回到父视图,或者从子视图中更改图像(在父UIView中)?
谢谢
首先,创建一个协议,该协议定义要在超级视图中调用的方法:
@protocol wheelViewDelegate {
-(void)doSomething;
}
您的superview需要实现此协议:
@interface superView:UIView<wheelViewDelegate> {
...
}
...
@end
另外,您显然需要实现doSomething
方法。
包含轮子的UIView需要是UIView的子类并保存委托,如下所示:
@interface WheelView : UIView {
id<wheelViewDelegate> delegate;
...
}
@propery (nonatomic, assign) id<wheelViewDelegate> delegate;
...
@end
不要忘记@synthesize id;
在你的实施中。
现在,您可以从子视图中调用doSomething
视图中的doSomething
:
[self.delegate doSomething];
编辑:
好吧,我认为这很明显,但是,当然,您需要像这样设置委托:
//In your superView:
WheelView* wv = [WheelView initSomeHow];
wv.delegate = self;
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).
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.