繁体   English   中英

从子视图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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM