在UIView

时间:2016-10-01 16:10:49

标签: ios xcode uiview storyboard

我在故事板中有这个设计,它是我同时堆叠的所有按钮。但是当我尝试将它连接到代码时,我有困难,似乎是如此重复。

enter image description here

我尝试使用常规拖放来连接所有按钮,但它看起来很长并且重复了。 是否有最佳实践可以连接并创建一个可以被所有按钮监听的监听器?使用for-loop可能是。

2 个答案:

答案 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;
        }
    }
};