删除动态创建的UIButton子视图

时间:2013-10-31 11:53:30

标签: ios objective-c uiview uibutton

我已经在@Midhun MP的帮助下将custombadge作为UIButton的子视图应用于此问题 - Adding a subview to UIButton

一切都很棒 - 但是我现在正试图在点击按钮时删除子视图。

我设置了一个通过点击其中一个按钮

触发的方法
- (void)hide
{
    //Hide Buttons
    _importantMsg.hidden = YES;


    [CustomBadge removeFromSuperview];

}

但我正在努力隐藏子视图 - 我已经尝试过了 -

[CustomBadge removeFromSuperview];

_MsgHeadBtn.subviews.hidden = YES;;

但我收到了未知的接收器错误 - 有人能指出我正确的方向吗?

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

enter image description here

4 个答案:

答案 0 :(得分:2)

您需要对自定义视图的引用,以便您可以删除它,iVar或者为视图提供标记,然后使用按钮viewForTag方法并删除该方式。

@implementation ViewController {
   UIView *_customView;
}

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

   [button addSubView:_customView];
}

- (void)hide
{
   [_customView removeFromSuperView];
   _customView = nil;
}

答案 1 :(得分:1)

试试这个

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

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

 }

答案 2 :(得分: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];
}

答案 3 :(得分:0)

您可以使用自定义子视图上的标记稍后将其删除。使用此选项添加自定义视图:

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

并将其删除

customBadge=[_MsgHeadBtn viewWithTag:1];
[customBadge removeFromSuperview]