2

我以编程方式在视图中添加了 3 个按钮,然后将这些按钮添加到数组中,以便以后可以访问它们:

for (i = 0; i < 3; i++)
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  [view addSubview:button];
  [_buttons addObject:button];
}

如果我引用数组中的按钮并更改按钮的图像,它不会更改屏幕上的按钮。

UIButton* button = [_buttons objectAtIndex: 0];
[button setImage:thumb forState:UIControlStateNormal];

我找到了一种通过循环遍历视图中的所有子视图来更改按钮图像的方法,但是有更好的方法吗?

for (UIView* subView in ((UIView*)[self.view.subviews objectAtIndex:0]).subviews){
    if ([subView isKindOfClass:[UIButton class]]){
        UIButton *button = (UIButton*)subView;
        if (button.tag == self.selected){
            [button setImage:thumb forState:UIControlStateNormal];
        }
    }
}
4

5 回答 5

4

一个常见的原因是您的数组尚未初始化。发生这种情况时,Objective C 不会抱怨或抛出异常:相反,它的行为就像从未发生过添加元素的调用一样。当您尝试取回物品时,它也会返回 nil。

将此行添加到您的 viewDidLoad 方法:

_buttons = [NSMutableArray array];

这应该可以解决问题。

于 2012-12-31T04:55:59.457 回答
0

这可能有助于点击事件:

      -(void)clickEvent:(id)sender
      {
           [sender setImage:thumb forState:UIControlStateNormal];
      }

如果这就是您接收事件的方式。

于 2012-12-31T04:49:51.473 回答
0

当您执行 addSubview 时,视图会保留您正在添加的子视图。addObject 也保留它。因此两者都是不同的对象。更改数组中对象的属性不会影响视图保留的对象。您可以通过使用标签来避免循环。在视图上添加按钮时,会为其设置唯一标签。当你想访问它们时,直接使用标签获取它。

//set tags for buttons
      UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
      [button setTag:999];
      [view addSubview:button];

//access using tag
      UIButton *button = (UIButton*)[view viewWithTag:999];
      [button setImage:thumb forState:UIControlStateNormal];
于 2012-12-31T04:55:18.253 回答
0

创建按钮后为其添加标签。稍后使用该标签获取该按钮。

for (i = 0; i < 3; i++)
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  button.tag = i+1;
  [view addSubview:button];
  [_buttons addObject:button];
}

然后你可以像这样访问它:

UIButton *button1 = (UIButton *)[self.view viewWithTag:1];
UIButton *button2 = (UIButton *)[self.view viewWithTag:2];
UIButton *button3 = (UIButton *)[self.view viewWithTag:3];
于 2012-12-31T04:57:00.637 回答
0

在添加UIControl programaticallyreference稍后使用add tag时,它应该是different这样的:

 yourBtn.tag = 111;

现在reference像这样获取 UIButton:

 UIButton *button = (UIButton*)[yourViewWhereYouAdded viewWithTag:111];
于 2012-12-31T04:58:19.107 回答