将UIButton事件从子视图传递到superview

时间:2013-12-03 02:16:42

标签: ios

我有一个像带有按钮的菜单视图的UIView。

我将此menubarView添加到另一个视图(parentView)。

我需要在菜单栏按钮的TouchUpInside上的parentView上调用一个方法。

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(x, y, width, height);
[button addTarget:self action:@selector(myLocalMethod:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Call My Method" forState:UIControlStateNormal];
[self addSubview:button];

解决方案: 在menuBarView中,我添加了以下代码:

- (void)myLocalMethod:(UIButton *)button
{
    ParentView *parent = (ParentView *)self.superview;
    [parent myMethod:button];
}

2 个答案:

答案 0 :(得分:0)

一个选项是在子视图上提供回调块:

@property (nonatomic, copy) void(^onDidTapMyButton1)();

然后在调用此回调的子视图上实现一个动作(或目标和选择器):

- (IBAction)didTapMyButton1 {
    if (self.onDidTapMyButton1) {
        self.onDidTapMyButton1();
    }
}

在父视图中,您可以执行以下操作:

mySubView.onDidTapMyButton1 = ^{
    // perform some action
};

您也可以使用所有按钮的单个回调来执行此操作:

@property (nonatomic, copy) void(^onDidTapButton)(UIButton *tappedButton);

- (IBAction)didTapButton:(UIButton *)sender {
    if (self.onDidTapButton) {
        self.onDidTapButton(sender);
    }
}

答案 1 :(得分:0)

myMethod

中尝试此操作
[((<SuperViewName>)self.superview) <methodInSuperView>]

将占位符 SuperViewName methodInSuperView 替换为您的姓名。

说明:我正在将superview转换为相应的superview类并调用所需的superview方法。确保 methodInSuperView 是公共的(在界面中声明它。)