在IBAction中将UIVIew与UIButton联系起来

时间:2013-03-11 09:12:42

标签: ios uiview

我有一个带有6个按钮和6个子视图的视图控制器(在故事板中)。这些子视图连接到IBOutlets并命名为“mySubView1”,“mySubView2”等:

@property (weak, nonatomic) IBOutlet UIView *mySubView1;
@property (weak, nonatomic) IBOutlet UIView *mySubView2;

我想根据按下的按钮为子视图的alpha值设置动画。所有6个按钮都连接到相同的IBAction(下方),每个按钮都有一个标签(1到6)。

如何动态获取子视图属性名称?例如,mySubView1,如果sender.tag = 1,例如,在下面的动画块中:

- (IBAction)animateSubviews:(id)sender {

[UIView animateWithDuration:0.4
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{
                      self.mySubView1.alpha = 1;
                 }
                 completion:^(BOOL finished){

                 }];

}

所以我需要的是:self.mySubView [sender tag] .alpha = 1种类型的东西,但我很难过,所以任何建议都非常感激。

非常感谢

2 个答案:

答案 0 :(得分:1)

1)为子视图分配标签

UIViews分配标签,例如与带标签1的按钮对应的视图可以包含标签101.

- (IBAction)animateSubviews:(id)sender {

[UIView animateWithDuration:0.4
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{
                      UIView *subview = [self.view viewWithTag:((UIButton*)sender).tag + 100]; 
                      subview.alpha = 1;
                 }
                 completion:^(BOOL finished){

                 }];
}

2)使用动态选择器(回答原始问题)

您可以使用返回NSSelectorFromString

的方法SEL
UIView *subview = [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"mySubView%d", ((UIButton*)sender).tag])];

答案 1 :(得分:0)

@property (strong, noatomatic) NSArray* arrayForSubViews;

if (!self.arrayForSubViews) {
    self.arrayForSubViews = @[ self.mySubView1, self.mySubView2, ... ];
}

//get the second view
self.arrayForSubViews[1];