我的问题有点笼统;在我的项目中,我有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
但基本上我想要的只是通过字符串
访问某个对象我该如何实现这样的行为?
答案 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])];