我有一个像带有按钮的菜单视图的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];
}
答案 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 是公共的(在界面中声明它。)