重构代码包含"按钮addTarget"

时间:2014-03-27 15:07:10

标签: ios refactoring

我有很多代码可以在UINavigationBar中更改视图。
所以代码是这样的:

UIButton *butt2=[UIButton buttonWithType:UIButtonTypeCustom ];

[butt2 setFrame:CGRectMake(285, 7, 30, 25)];
[butt2 setTag:2];
[butt2 setImage:[UIImage imageNamed:@"tag_icon.png"] forState:UIControlStateNormal];
[butt2 addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchDown];
[self.navigationController.navigationBar addSubview:butt2] ;

我想创建一个方法来获取代码中不同内容的参数:
1.图像(简单)
2.按钮的动作 - AHA!这个我无法弄清楚如何做

2 个答案:

答案 0 :(得分:0)

添加目标原型是:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

如果你使用相同的类型" SEL"你应该将@selector(yourMethod)传递给你的方法。

答案 1 :(得分:0)

如果您决定将其实现为功能,则可能类似于

void addNavigationButton(UIViewController *vc, UIImage *image, SEL action)
{
    UIButton *butt2=[UIButton buttonWithType:UIButtonTypeCustom ];

    [butt2 setFrame:CGRectMake(285, 7, 30, 25)];
    [butt2 setTag:2];
    [butt2 setImage:image forState:UIControlStateNormal];
    [butt2 addTarget:vc action:action forControlEvents:UIControlEventTouchDown];
    [vc.navigationController.navigationBar addSubview:butt2] ;
}

应该在视图控制器中调用它

addNavigationButton(self, [UIImage imageNamed:@"tag_icon.png"], @selector(revealMenu:));

另一个好主意 - 将此函数实现为UIViewController的类别方法。