比如有上下左右四个按钮,我四个按钮都连线move方法,这样不管点击四个中的哪个按钮都能执行move方法,这个效果代码要怎么实现?
四个按钮调用同一个方法,给每个按钮一个标记符。
使用代码的实现方式:按钮连线到控制器,每个都使用addtarget方法设置selector都是move方法就行.
SEL selector = NSSelectorFromString(@"move");
for (int i = 0; i < 4; i++) {
UIButton button = [[UIButton alloc] initWithFrame:CGRectMake(10 + 50((i + 1)/2),10 + 50*(i/2), 40, 20)];
[button setBackgroundColor:[UIColor blackColor]];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitle:[NSString stringWithFormat:@"button%d",i] forState:UIControlStateNormal];
[button addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
下面定义move方法就行了
- (void)move {
NSLog(@"move");
}
给每个控件设置tag,在move方法中传入控件,通过判断控件tag值来执行对应代码的逻辑
设置不同的 tag 就可以了 move方法带参数 把tag值传过来 根据不同的tag值进行判断点了 哪个btn
给每个按钮都调用同一个方法且给每一个按钮做一个标记符
按钮都绑定move方法,move方法把按钮带过来,根据带过来的按钮的标题判断是点击那个按钮,或者给每个按钮加一个不一样的tag,通过tag判断是那个按钮
楼主的意思是让四个按钮又能点击又能移动吧,写一个继承UIButton的类做按钮基类,重写touchesMoved方法,在touchesMoved方法完成
移动,四个按钮的touchesMoved方法调用同一个move方法,在move方法完成移动。
addTarget: 指定同一个方法就可以了, 再根据button的tag或者自定义的字段,类型区分
调同一个方法就行了啊
每个按钮设置不同的tag值,调用同一方法时,判断tag进行不同操作就OK了。
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *b1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
b1.tag = 1; // 区分下
// ...
[b1 addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside];
// b2...
}
- (void)move:(UIButton *)sender {
//
if (sender.tag == 1) {
// blabla
}
}
UIVIew下有一个属性叫tag,是一个NSInteger类型,你的4个btn可以设置不同tag,同时加上相同的target,这样在响应事件的时候,可以根据tag来区分是哪个按钮被点击了。
每个按钮添加tag,在点击方法里面把按钮根据tag做区分,分别处理不同按钮的点击事件。
按住control都拖到move这个方法就行了
给按钮添加tag值绑定统一方法,通过tag值来区分是哪一个按钮
和用storyboard一样,创建按钮的时候设置tag
UIButton *btn=[[UIButton alloc] init];
[btn setTitle:@"上" forState:UIControlStateNormal];
[btn setTag:1];
然后注册点击事件,注意方法名中要有冒号,以便将按钮传入
[btn addTarget:self action:@selector(move:) forControlEvents:UIControlEventTouchUpInside];
方法示例
- (void)move:(UIButton *)sender
{
CGPoint cen=[[self Button] center];
switch ([sender tag])
{
case 1:cen.y-=20;break;
case 2:cen.x+=20;break;
case 3:cen.y+=20;break;
case 4:cen.x-=20;break;
}
[UIView animateWithDuration:1 animations:^{[[self Button] setCenter:cen];}];
}
直接 把 每个按钮 拖线 到 这个方法不就行了
1.先写一个需要调用的方法
每个控件设置tag就行,我经常这么干