UIView
本節小結知識點:
- 什麼是控件?
- 控件的共同屬性有哪些?
- 父控件、子控件
- UIView的常見屬性
- UIView的常見對象方法
- 補充:
1. 什麼是控件?
- 屏幕上的所有UI元素都叫做控件,也有人叫做視圖、組件
- 按鈕(UIButton)、文本(UILabel)都是控件
2. 控件的共同屬性有哪些?
- 尺寸
- 位置
- 背景色
- ......
- 蘋果將控件的共同屬性都抽取到父類UIView中
- 所有的控件最終都繼承自UIView
- UIButton、UILabel都是繼承自UIView(可以查看頭文件)
3. 父控件、子控件
每個控件都是個容器,能容納其他控件
- 內部小控件是大控件的子控件
- 大控件是內部小控件的父控件
每一個控制器(UIViewController)內部都有個默認的UIView屬性
@property(nonatomic,retain) UIView *view;
控制器中管理的其他所有控件都是這個view的子控件(直接或者間接)
- 注意:間接是指子控件的子控件。
4. UIView的常見屬性
獲得自己的父控件對象
@property(nonatomic,readonly) UIView *superview;
獲得自己的所有子控件對象
@property(nonatomic,readonly,copy) NSArray *subviews;
控件的ID(標識),父控件可以通過tag來找到對應的子控件(這裏一般要結合方法使用)
@property(nonatomic) NSInteger tag;
控件的形變屬性(可以設置旋轉角度、比例縮放、平移等屬性)
@property(nonatomic) CGAffineTransform transform;
5. UIView的常見對象方法
添加一個子控件view
- (void)addSubview:(UIView *)view;
從父控件中移除
- (void)removeFromSuperview;
根據一個tag標識找出對應的控件(一般都是子控件或間接子控件)
- (UIView *)viewWithTag:(NSInteger)tag;
內部查找原理先匹配自己、在匹配子控件(如果子控件又有子控件,則會進入子控件遍歷),找到就返回並不在查找
如果僅僅是爲了查找一個控件,不建議使用tag這個方法,這種遍歷的形式性能較差,建議定義一個屬性變量定義直接查找;// 遍歷過程,如下僞代碼 //- (UIView *)viewWithTag:(NSInteger)tag //{ // if (self.tag == tag) return self; // for (UIView *subview in self.subviews) { // if (subview.tag == tag) return subview; // } // return nil; //}
6. 補充:
// 當控制器的view加載完畢後會自動調用這個方法1次
- (void)viewDidLoad{
}
// 當點擊控制器的view就會自動調用這個方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 移除紅色的view :removeFromSuperview 把左邊的控件從父控件中移除
// [self.redView removeFromSuperview];
UIView * redView = [self.view viewWithTag:11];
[redView removeFromSuperview];
}