我有一個看法。在該視圖中,我有一個 uibutton。在 uibutton 中,我使用以下代碼添加了另一個較小的 uibutton。
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(self.friendsButton.frame.size.width-15, 5, 10, 10)];
self.badgeIndicatorView.backgroundColor = [UIColor redColor];
BOOL doesContain = [self.friendsButton.subviews containsObject:self.badgeIndicatorView];
if(!doesContain){
[self.friendsButton addSubview:self.badgeIndicatorView];
}
doContain 始終為否。containsObject 似乎不起作用。我想檢查被呼叫的 uibutton 是否badgeIndicatorView已經存在于friendsButton. 我錯過了什么?任何幫助表示贊賞。
uj5u.com熱心網友回復:
使用此代碼:
// create a NEW button
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(self.friendsButton.frame.size.width-15, 5, 10, 10)];
self.badgeIndicatorView.backgroundColor = [UIColor redColor];
// friendsButton CANNOT contain the button you just created
BOOL doesContain = [self.friendsButton.subviews containsObject:self.badgeIndicatorView];
你會想檢查是否friendsButton 已經有一個子視圖按鈕。
作為旁注,更好的方法是創建一個子類,badgeIndicatorView在 init 上添加按鈕并將其設定為hidden. 然后,根據需要顯示或隱藏它。
編輯
這一行:
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(20, 10, 100, 40)];
創建一個新按鈕并將其分配給self.badgeIndicatorView。
如果一個按鈕已經被創建并分配給self.badgeIndicatorView,新按鈕將不等于舊按鈕。舊按鈕將仍然存在,但將不再分配給self.badgeIndicatorView。
查看它的簡單方法...運行此代碼:
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(20, 10, 100, 40)];
// log description of self.badgeIndicatorView
NSLog(@"1: %@", self.badgeIndicatorView.debugDescription);
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(20, 10, 100, 40)];
// log description of self.badgeIndicatorView
NSLog(@"2: %@", self.badgeIndicatorView.debugDescription);
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(20, 10, 100, 40)];
// log description of self.badgeIndicatorView
NSLog(@"3: %@", self.badgeIndicatorView.debugDescription);
并且除錯輸出將與此類似 - 請注意物件地址不同(意味著您創建了 3 個按鈕):
1: <UIButton: 0x7f997310e310; frame = (20 10; 100 40); opaque = NO; layer = <CALayer: 0x600002208000>>
2: <UIButton: 0x7f9951f09be0; frame = (20 10; 100 40); opaque = NO; layer = <CALayer: 0x600002275e60>>
3: <UIButton: 0x7f99730065a0; frame = (20 10; 100 40); opaque = NO; layer = <CALayer: 0x600002262760>>
因此,分配給 的 NEW 按鈕實體self.badgeIndicatorView將與已創建并添加到 的按鈕實體不同self.friendsButton。
您可以通過檢查 if self.badgeIndicatorViewis not nil...來簡化事情,這意味著它已經被創建并添加了:
if (!self.badgeIndicatorView) {
// create badgeIndicatorView and add it to self.friendsButton
} else {
// badgeIndicatorView already exists!
}
uj5u.com熱心網友回復:
您正在將一個新物件分配給您的udgementIndicatorView 屬性。在將其添加為子視圖之前,現有按鈕不能將其作為子視圖。您可以使用標記來標識視圖層次結構中的特定子視圖。
我假設您只嘗試設定子視圖一次。為此,您可以首先檢查按鈕中是否存在具有特定標簽的視圖。如果沒有,您可以創建按鈕,為其分配特定標簽并將其添加為子視圖。下一次, viewWithTag 將為您提供先前創建的物件,該物件已作為子視圖添加。
self.badgeIndicatorView = (UIButton *)[self.friendsButton viewWithTag:1];
if (!self.badgeIndicatorView) {
self.badgeIndicatorView = [[UIButton alloc] initWithFrame:CGRectMake(self.friendsButton.frame.size.width-15, 5, 10, 10)];
self.badgeIndicatorView.backgroundColor = [UIColor redColor];
self.badgeIndicatorView.tag = 1;
[self.friendsButton addSubview:self.badgeIndicatorView];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395791.html
下一篇:我如何授予執行陳述句
