我有一个带有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种类型的东西,但我很难过,所以任何建议都非常感激。
非常感谢
答案 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];