0

我的问题有点笼统;在我的项目中,我有 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

4 回答 4

2

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

更好的是,只需将标签值用于按钮或图像视图。

于 2012-07-11T13:56:11.097 回答
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
}
于 2012-07-11T13:55:20.160 回答
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 文件中,或者您可以通过编程方式创建 UIImage 的任何地方,相应地添加标签。

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

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

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

buttonArray[sender.tag] = someManipulation; 
于 2012-07-11T13:58:02.800 回答
1

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

使用 kvo

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

或使用选择器和属性

UIButton* myButton = [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"button%i",i])];
于 2012-07-11T14:03:13.897 回答