继承只UIControl的控件包括UIButton,UIDatePicker,UIPageControl,UISegmentedControl,UITextField,UISwitch,UISlider。这些控件具有区别于其他的控件的特点:
1,特点一:它们可以响应时间,比如UISlider控件,它跟UIProgress的最明显的区别就在于它可以手动拖动滑块来改变当前的的值,而UIProgress是没法办到的,再来看看UIButton和UILabel,UILabel只能显示,不能对事件进行反应,但是UIButton就不一样,当我们点击按钮时,按钮会做出响应的反应来回应我们的点击。 那么是什么原因导致这样的现象呢? 其实原因在于一个方法,UIControl里面有这个方法:- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 这个方法的作用就是给UIControl以及继承于UIControl的控件提供一个响应事件的方法,在这个方法里可以实现我们想要实现的东西。
2,既然知道了UIControl和非UIControl控件的区别在于可以添加响应事件的方法,那么这个方法又有什么独特的地方呢?
这个方法的独特之处是当我们可以在方法后面添加一个控件本身的参数。这句话怎么理解呢? 其实这句话的意思是添加的事件响应方法的参数就是这个控件本身,当我们给方法添加参数时,系统会西东将这个控件传到这个参数里,于是我们在事件响应的方法里就可以拿到当前我们使用的控件,进而完成我们想要的操作。具体的代码如下:
- (void)btnClick:(UIButton *) btn {
btn.titleLabel.text = @"按钮被点击了"; // 这里的btn对象就是我们当前被点击的按钮本身。
}