2011-05-28 167 views
0

我試圖將一個字符串強制轉換爲按鈕類型。基本上,Im循環,比如說5個按鈕,命名爲btn1,btn2..btn5。以下是摘錄:將NSString強制轉換爲UIButton類型

- (IBAction)replaceImg 
{ 
    UIButton* b; 
    for(int i=0; i<5; i++) 
    {  
    b = (UIButton*)[NSString stringWithFormat:@"btn%d",i]; //1! 
    if([b isHighlighted]) 
     { 
     int imgNo = (arc4random() % 6) + 1; 
     UIImage *img = [UIImage imageNamed:[NSStringstringWithFormat:@"%d.png", imgNo]]; 
     [b setImage:img forState:(UIControlState)UIControlStateNormal]; 
     } 
    } 
} 

標記爲1的行出現問題,如果將其與b = btn1進行交換,它會完美工作。請幫忙! 我無法找到一種通過其名稱訪問按鈕的方法。像UIImage一樣,像imageNamed。

+0

嗨,如果你改變它的點擊按鈕圖像,你可以使用按鈕標籤 – SriPriya 2011-05-28 06:05:52

+0

爲什麼你要將字符串轉換爲按鈕? – 2011-05-28 06:10:35

+0

@pratikshabhisikar這可能只是一個初學者對如何投射以及它是如何工作的誤解。 – nil 2011-05-28 06:13:00

回答

0

您不能'將'NSString'轉換爲按鈕。要按名稱獲取特定的按鈕或按鈕,取決於您如何創建它們。將創建的按鈕存儲到數組中,或者如果它們來自NIB,則將它們的指針收集到一個數組中,然後遍歷按鈕指針數組。控件也是UIViews,所以你可以給Interface Builder中的每個按鈕分配一個數字「標籤」,然後使用UIView的viewWithTag:方法來搜索具有特定標籤的特定視圖。

+0

感謝您的快速反應,夥計們,我嘗試使用一個數組,但我堅持只是他們的聲明(我對iPhone應用開發非常新!由java,cpp和php洗腦)。我是否對數組和UIButton對象使用property和sythesize?然後使用initWithobjects? – appster 2011-05-28 06:17:19

+0

更好地避免(@)屬性和(@)綜合,直到你真正熟悉Objective-C內存管理和數據類型。 – 2011-07-22 18:59:27

0

NSString不是UIButton,所以將它轉換爲一個不會起作用。那麼,它可能會工作到語法去,但邏輯上,它會失敗。您無法以與UIButton相同的方式與NSString進行互動。如果你需要通過名字找到你的按鈕,那麼你可以保留指向這些按鈕的指針(無論是在數組中,地圖中,還是像普通的實例變量一樣),或者你可以使用類似viewWithTag:

1

因爲兩者都是完全不同的類型,所以不能將NSString轉換爲UIButton

使用標籤的UIView財產分配和唯一的編號到每個UIButton並在任何時候,你可以通過使用viewWithTag訪問它們。

+0

好的,謝謝,我會試試這個! – appster 2011-05-28 06:20:54

相關問題