从子视图Objective-c中检索值

时间:2010-10-28 09:52:22

标签: iphone objective-c uiview subview

我创建了一个UIView的子类,它是一个旋转轮。这个轮子是另一个UIView的一部分,它在右上角有一个图像。 转动滚轮时,在touchMoved功能中返回最右侧的项目(其编号)。我需要在转动子视图时自动更改父图像(当返回数字时)

假设我在子视图中有这个号码,我该如何将其返回到父视图,或者从子视图中更改图像(在父UIView中)?

由于

2 个答案:

答案 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).
}