UIkit复习:UIContorl及子控件的剖析

1.模块继承关系:

1.UIButton        ->UIControl  -> UIView

2.UILabel          ->UIview

3.UIImageView  ->UIView

4.UITextField    ->UIControl

对于@selector为什么可以监听:@selector将监听方法注册到”运行循环“,”运行循环“当按钮点击后,通知视图控制器执行@selector的方法

UIControl的剖析:

 1 /______________________________________________________
 2
 3 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView
 4
 5 //1.1设置控件的状态     启用 禁用:一个按钮可不可以点击
 6 @property(nonatomic,getter=isEnabled) BOOL enabled;                                  // default is YES. if NO, ignores touch events and subclasses may draw differently     选中 不选中:
 7 @property(nonatomic,getter=isSelected) BOOL selected;                                // default is NO may be used by some subclasses or by application     高亮或者不高亮
 8 @property(nonatomic,getter=isHighlighted) BOOL highlighted;                          // default is NO. this gets set/cleared automatically when touch enters/exits during tracking and cleared on up
 1.2设置控件内容的布局   垂直居中方向9 @property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;     // how to position content vertically inside control. default is center   水平居中方向
10 @property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center
11 

12 @property(nonatomic,readonly) UIControlState state;                  // could be more than one state (e.g. disabled|selected). synthesized from other flags.
13 @property(nonatomic,readonly,getter=isTracking) BOOL tracking;
14 @property(nonatomic,readonly,getter=isTouchInside) BOOL touchInside; // valid during tracking only
15
16 - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
17 - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
18 - (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event; // touch is sometimes nil if cancelTracking calls through to this.
19 - (void)cancelTrackingWithEvent:(nullable UIEvent *)event;   // event may be nil if cancelled for non-event reasons, e.g. removed from window
20
21 // add target/action for particular event. you can call this multiple times and you can specify multiple target/actions for a particular event.
22 // passing in nil as the target goes up the responder chain. The action may optionally include the sender and the event in that order
23 // the action cannot be NULL. Note that the target is not retained.
24 添加或者删除监听方法

- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
25
26 // remove the target/action for a set of events. pass in NULL for the action to remove all actions for that target
27 - (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(UIControlEvents)controlEvents;
28
29 // get info about target & actions. this makes it possible to enumerate all target/actions by checking for each event kind
30 - (NSSet *)allTargets;                                                                     // set may include NSNull to indicate at least one nil target
31 - (UIControlEvents)allControlEvents;                                                       // list of all events that have at least one action
32 - (nullable NSArray<NSString *> *)actionsForTarget:(nullable id)target forControlEvent:(UIControlEvents)controlEvent;    // single event. returns NSArray of NSString selector names. returns nil if none
33
34 // send the action. the first method is called for the event and is a point at which you can observe or override behavior. it is called repeately by the second.
35 - (void)sendAction:(SEL)action to:(nullable id)target forEvent:(nullable UIEvent *)event;
36 - (void)sendActionsForControlEvents:(UIControlEvents)controlEvents;                        // send all actions associated with events
37
38 @end
39
40 NS_ASSUME_NONNULL_END
时间: 2024-08-13 03:13:18

UIkit复习:UIContorl及子控件的剖析的相关文章

解决TalbleView头部或底部子控件不显示问题

在自定义cell头部控件UITableViewHeaderFooterView(和自定义cell的方法几乎一样)时,出现了头部控件子控件不显示的问题. 注意和自定义cell的区别. .h文件 1 #import <UIKit/UIKit.h> 2 #import "CHModleGroup.h" 3 @interface HeaderView : UITableViewHeaderFooterView 4 @property (nonatomic, weak) UILabe

iOS开发——实战技术OC篇&amp;点击状态栏ScrollView(包括子控件)自动滚到顶部

点击状态栏ScrollView(包括子控件)自动滚到顶部 其实这种方式我们平时见的还是比较多的,而且适合用户的需求,所以就搬来琢磨了一下,感觉效果还不错 这里就直接将解决思路一一写出来不将代码分段展示了,在代码中我加了详细的注释objective-c的套路和swift基本一样,在最后会将Swift和objective-c的代码一起放上,如果需要直接解决问题的童鞋可以直接将代码拷贝到工程里即可 首先创建一个topWindow继承至NSObject,这里我们考虑将这个功能完全封装起来,所以所有的方法

iOS开发项目篇—43子控件的细节处理

iOS开发项目篇—43子控件的细节处理 一.升级UI 把之前的UI图片删除,换上新的图片(图片命名一致,规范)没有其他的影响. 删除之后,添加. 替换之后,做一次clear操作. 建议把沙盒中的包删除,删除之后再做一次clear操作. 二.调整转发(模块) 1.设置背景(使用提供的素材图片进行平铺) 为转发微博部分设置背景,考虑到这个部分整体上是一个UIView,可以尝试以下设置. 第一种尝试: 但是这样设置,因为图片是平铺的,所以整个背景会出现线条效果,影响显示,不可行. 第二种尝试: 注意:

IOS 读取xib里的子控件

interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *aps; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //九宫格的总列数 int totalColumns=5; //1.1个格子的尺寸 CGFloat appW=50; CGFloat appH=60; //2.计算间隙

父控件、子控件

1 每一个控件其实都是一个容器可以将其他控件放到该控件的内部比较常见的还是将UIView作为容器 2 可以将A控件放入B控件A控件是B控件的子控件B控件是A控件的父控件 3 每一个控制器都有一个UIView控制器本身是不可见能够看到的是控制器的View每一个控制器中都一个UIVIew的属性控制器中管理的所有子控件都是该控件的子控件

Android--根据子控件的大小自动换行的ViewGroup

1.自定义ViewGroup 1 /** 2 * Created by Administrator on 2016/2/26. 3 * 4 * --------自动换行的ViewGroup----------- 5 */ 6 public class LineWrapLayout extends ViewGroup { 7 private static final boolean DEBUG = true; 8 private static final String TAG = "AutoLin

[转]Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件

Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件. 1.为了防止拖动ListView时,在列表末尾重复数据显示.需要加入 HashMap<Integer,View> lmap = new HashMap<Integer,View>();其中Integer为列表位置,View为子项视图,加入数据前首先if (lmap.get(position)==null) ,满足条件时,加入lmap.put(position, convertView

xib或storyBoard中往scrollView添加子控件

如何在xib或者storyBoard中的scrollView加拖拽子控件,并且能让它可以正常滚动,那么下面就为大家简单演示: 运行环境为:Xcode 7.3 备注:图片较大,如果看不清看可以右键鼠标在新标签中打开图片就很清晰了 1.如图我们往storyBoard拖拽一个scrollView并设置为上下左右约束距离父控件为0 2.当我们往scrollView中添加子控件时候却发现报错了 因为scrollView比较特殊,需要设置contentSize,这个错误和平常我们遇到的错误不一样,因为在这两

listView 解决焦点冲突问题 item项和子控件之间的冲突

listView 在item布局的顶级布局中设置 android:descendantFocusability="blocksDescendants"可以阻止子控件获取焦点 这样使item项可以点击 这时其中的图片控件还是可以点击的当不想让item能点击时 可以不加上边的设置 并且将焦点转移到子控件 focusable属性 <TextView android:id="@+id/recommend_album_more" android:layout_width