如何从字符串指向对象

时间:2012-07-11 13:45:41

标签: iphone objective-c

我的问题有点笼统;在我的项目中,我有10个UIButton个对象 名为Button1,Button2,Button3,Button4,Button5,Button6,Button7,Button8,Button9和Button10

我也有UIImageview,其名称与1到10的按钮完全相同。

我想编写一个代码,按照按钮的最后一个字符操作图像(总是1到10之间的数字),并且会以同样的方式影响UIImageview

像这样的东西

buttonlastcharacter = i;
    if(sender.lastcharacternumber is:i){
    Button%,i.frame = //Some manipulation

但基本上我想要的只是通过字符串

访问某个对象

我该如何实现这样的行为?

4 个答案:

答案 0 :(得分:2)

有几种更好的方法可以做到这一点。如果这些按钮都是静态的,并且在IB中,您可以使用IBCollection数组来查看图像视图和按钮,只需通过匹配索引来调用它们。

最好还是使用按钮或图像视图的标记值。

答案 1 :(得分:1)

你可以这样做, 在您的IBAction方法中:

- (IBAction)click:(id)sender
{
 UIButton *but = (UIButton *)sender;
 but.frame = your manipulation code;
}

或者你可以查看标题:

if([but.currentTitle isEqualToString:@"Button1])
{
 //Manipulate button 1
}

如果您为1-10可以使用的按钮添加了标签,

if(but.tag == 2)
{
   //Manipulate button 2
}

答案 2 :(得分:1)

嗯,您可以使用数组作为按钮,并使用UIImageView对象的标记。它们都继承自UIView,它为您提供.tag的支持。它的类型为NSInteger *。

为了方便起见,我建议将按钮命名为0到9.这并不重要,但数组中的第一个索引将为0,因此相应地命名它们会使事情变得更容易。

定义

NSArray *buttonArray;

您可以选择NSMutableArray,具体取决于您可能想要使用的其他内容。

在viewDidLoad代码中:

buttonArray = [NSArray arrayWithCapacity:10];
buttonArray[0] = button0;
..
buttonArray[9] = button9;

在Interface Builder中的XIB文件中,或者您可以通过编程方式创建UIImages,相应地添加标记。

image0.tag = 0; 
...
image0.tag = 9;

假设您将它们命名为image0到image9。

在适当的操作方法代码中:

buttonArray[sender.tag] = someManipulation; 

答案 3 :(得分:1)

在您的情况下,它可能不是理想的解决方案,但您可以采用不同的方式:

使用kvo

UIButton* myButton = [self valueForKey:[NSString stringWithFormat:@"button%i",i]];

或选择器和属性

UIButton* myButton = [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"button%i",i])];