2013-10-31 41 views
1

我已經在此問題中使用了@Midhun MP的幫助將一個定製視圖應用爲UIButton的子視圖 - Adding a subview to UIButton刪除動態創建的UIButton子視圖

所有的作品很好 - 但我現在試圖刪除按鈕被點擊時的子視圖。

我設置的方法多數民衆贊成通過點擊觸發按鈕

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


    [CustomBadge removeFromSuperview]; 

} 

但我掙扎隱藏子視圖中的一個 - 我試過 -

[CustomBadge removeFromSuperview]; 

_MsgHeadBtn.subviews.hidden = YES;; 

但我得到未知的接收錯誤 - 任何人都可以指出我在正確的方向嗎?

每個

錯誤嘗試顯示在下面的截圖 -

enter image description here

+0

可以告訴我們什麼樣的錯誤? –

+0

removeFromSuperview應該可以工作。 –

+0

@JayGajjar - 是的 - 只是增加了一個截圖 – Dancer

回答

2

你需要或者到自定義視圖的引用,所以你可以刪除它,伊娃或可選擇地給視圖,則標籤使用按鈕viewForTag方法並從中刪除。

@implementation ViewController { 
    UIView *_customView; 
} 

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

    [button addSubView:_customView]; 
} 

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

嗨達林這所有的作品除了隱藏部分 - – Dancer

+0

試圖_customView.hidden = YES;看看是否隱藏它,如果它確實如此,那麼從超級視圖中刪除customView的問題是 – darren102

+0

完美的問題 - 只是使用hidden = yes會出問題嗎? – Dancer

1

嘗試與此

如果創建的按鈕動態地其可具有按鈕參考的方法。

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

} 
+0

這是好方法 –

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]; 
} 
0

您可以在您的自定義子視圖上使用標籤以後刪除它。使用此添加自定義視圖:

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

,這將其刪除

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