2011-05-28 168 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

相关问题