1

在@Midhun MP 在这个问题的帮助下,我已将 custombadge 应用为 UIButton 的子视图 -将子视图添加到 UIButton

一切都很好 - 但我现在试图在单击按钮时删除子视图。

我已经设置了一个通过单击其中一个按钮触发的方法

- (void)hide
{
    //Hide Buttons
    _importantMsg.hidden = YES;


    [CustomBadge removeFromSuperview];

}

但我正在努力隐藏子视图 - 我试过 -

[CustomBadge removeFromSuperview];

_MsgHeadBtn.subviews.hidden = YES;;

但我收到未知的接收器错误 - 任何人都可以指出我正确的方向吗?

每次尝试的错误显示在下面的屏幕截图中 -

在此处输入图像描述

4

4 回答 4

2

您需要对自定义视图的引用,以便您可以将其删除,iVar 或者给视图一个标签,然后使用按钮 viewForTag 方法并以这种方式删除。

IE

@implementation ViewController {
   UIView *_customView;
}

-(void)addCustomsubView
{
   _customView = [UIView alloc] init …./ your initialize

   [button addSubView:_customView];
}

- (void)hide
{
   [_customView removeFromSuperView];
   _customView = nil;
}
于 2013-10-31T12:00:58.817 回答
1

试试这个

如果您动态创建按钮,则可以具有按钮引用的方法。

 -(void)hide:(UIButton *)sender
 {
   for(UIView *viewRef in sender.subviews)
    {
     if(viewRef isKindofClass:[CustomBadge class])
     {
      [viewRef removeFromSuperview];
     }
    }

 }
于 2013-10-31T12:07:35.607 回答
0

第一个问题是_MsgHeadBtn.subviews.hidden = YES; .subviews 是一个数组,您不能对其执行 setHidden 选择器。第二个问题是,如果您在之后立即删除视图,则隐藏视图是没有意义的。第三个问题是

 [CustomBadge removeFromSuperview];

CustomBadge 不是一个类的实例,一个对象,它只是一个类。理论方法就像

-(void)addSomeView {
    //customBadge MUST be an instance variable or a property, otherwise you are not holding a reference to it so you can access it later
    customBadge = [[CustomBagde alloc] initWith...];
    [yourButton addSubView:customBadge];
}


-(void)hide {
    //This is where the app will crash if customBadge is not a property or an instance variable
    [customBadge removeFromSuperView];
}
于 2013-10-31T12:07:44.507 回答
0

您可以在自定义子视图上使用标签稍后将其删除。使用它来添加您的自定义视图:

customBadge1.tag=1;
[_MsgHeadBtn addSubview:customBadge1];

这要删除它

customBadge=[_MsgHeadBtn viewWithTag:1];
[customBadge removeFromSuperview]
于 2013-10-31T12:09:47.797 回答