我已经在@Midhun MP的帮助下将custombadge作为UIButton的子视图应用于此问题 - Adding a subview to UIButton。
一切都很棒 - 但是我现在正试图在点击按钮时删除子视图。
我设置了一个通过点击其中一个按钮
触发的方法- (void)hide
{
//Hide Buttons
_importantMsg.hidden = YES;
[CustomBadge removeFromSuperview];
}
但我正在努力隐藏子视图 - 我已经尝试过了 -
[CustomBadge removeFromSuperview];
和
_MsgHeadBtn.subviews.hidden = YES;;
但我收到了未知的接收器错误 - 有人能指出我正确的方向吗?
每个尝试的错误显示在下面的屏幕截图中 -
答案 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]