我在故事板中有这个设计,它是我同时堆叠的所有按钮。但是当我尝试将它连接到代码时,我有困难,似乎是如此重复。
我尝试使用常规拖放来连接所有按钮,但它看起来很长并且重复了。 是否有最佳实践可以连接并创建一个可以被所有按钮监听的监听器?使用for-loop可能是。
答案 0 :(得分:1)
你可以在故事板中链接它们。
目标-C
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray * buttons;
Swift 2.2
@IBOutlet var collectionOfButtons = [UIButton]()
override func viewDidLoad() {
super.viewDidLoad()
collectionOfButtons.forEach {
$0.addTarget(self, action: #selector(someFunc(_:)), forControlEvents: .TouchUpInside)
}
}
或者更简单的方式:
override func viewDidLoad() {
super.viewDidLoad()
for view in view.subviews {
(view as? UIButton)?.addTarget(self, action: #selector(someFunc(_:)), forControlEvents: .TouchUpInside)
}
}
func someFunc(sender: UIButton?) {}
Swift 3.0
override func viewDidLoad() {
super.viewDidLoad()
view.subviews.forEach {
($0 as? UIButton)?.addTarget(self, action: #selector(someFunc(_:)), for: .touchUpInside)
}
}
func someFunc(_ sender: UIButton?) {}
答案 1 :(得分:0)
你可以在这里使用switch代替循环:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.btn1);
Button button2 = (Button)findViewById(R.id.btn2);
..
....Another buttons
.....
button.setOnClickListener(onClickButtons);
button2.setOnClickListener(onClickButtons);
}
View.OnClickListener onClickButtons = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1: // do smth
break;
case R.id.bt2: //do another thing
break;
..
...
....
default :
break;
}
}
};