UIView是负责在iOS里面显示一切内容的容器,UIView是所有View视图的父类,包括UIWindow,也是UIView的子类。
1.UIView 重要属性
frame // 指定视图的坐标和大小,相对于父视图的坐标系;
bounds // 边界属性,定义视图的位置和大小,是相对于自身的坐标系;
center // frame的中心坐标,相对于父视图的坐标系;
alpha // 透明度;
backgroundColor // 视图的背景颜色;
userInteractionEnabled // 是否可以响应点击(父视图如果不接受用户交互事件,子视图同样也不会接受用户事件);
autouresizingMask // 如何调整自己的大小,当superView的bounds发生改变时;
autouresizsSubviews // 是否自动调整subviews的大小,默认为YES;
clipsToBounds // 子视图超出父视图bounds后,是否裁减,默认为false;
// (如果子视图超出了父视图的范围,默认情况下在界面上子视图会全部显示出来,但超出的范围不会接受到用户事件)
每个view都有一个tag属性,可以通过它来快速定位某个subview;
-(UIView *)viewWithTag:(NSInteger)tag;
-(void)setTag:(NSInteger)tag;
View圆角
view.layer.cornerRadius = 5; // 圆角半径
view.layer.masksToBounds = YES; // 裁剪layer多余的部分
如果在代码中设置圆角无效,可参考:在initWithCoder中,设置view.layer.masksToBounds无效,则还需要在awakeFromNib中再设置;
2.UIView 常见方法
initWithFrame:(CGRect)frame // 初始化
addSubview: // 添加视图
insertSubview:atIndex: // 插入视图
insertSubview:aboveSubview:
insertSubview:belowSubview:
sendSubviewToBack:
exchangeSubviewAtIndex:withSubviewAtIndex:
removeFromSuperview: // 移除视图
setNeedsLayout: // 强制重新布局子控件(此方法会自动调用layoutSubviews)
[view performSelector: withObject: afterDelay: ]; // 延迟一段时间执行某个方法;
[view.subviews makeObjectsPerformSelector: withObject:]; // 让view的全部subview执行某一个方法,selector(方法名);
-(void)bringSubviewToFront:(UIView *)view // 把某一个view(v)显示在父view的最上层;
3.initWithCoder和awakeFromNib
当UIView从xib或者storyboard中创建好并且可以使用该控件时,会调用awakeFromNib方法;因为从xib或者storyboard中创建,其实就是从文件中创建,即是通过归档文件来创建UIView的,所有也会执行initWithCoder方法,并且是在awakeFromNib方法前执行;如果使用自定义view,则在initWithCoder方法里面需要调用[super initWithCoder];
在initWithFrame和initWithCoder两个方法里面都不能准确获取View的frame,如果要对子view进行frame设置,则需要在layoutSubviews方法里面来对subview设置frame或其它属性;
当UIView是通过代码创建的时候,也会调用initWithFrame方法;
4.代理delegate
UIView控件的代理属性的标识必须为weak;因为本身把一个UIView添加到一个controller,该controller就持有了该对象的强引用,如果再把控件的delegate属性也使用strong的话,就会造成控件与控制器的循环引用,从而导致内存问题;
但并不是所有的代理都必须使用weak,其它情况下是可以使用strong的;
UILabel
numberOfLines = 0; // label会自动换行,根据需要显示的内容来决定行数;
lineBreakMode = NSLineBreakByWordWrapping; // 换行模式;
通常两个属性要同时设置;
UITextField(只有一行)
placeholder // hint 提醒
keyboardType // 键盘类型
secureTextEntry = YES; // 密码输入
contentVerticalAlignment; // 垂直对齐方式(父类的属性);
delegate // 用户交互事件,是一个协议,可以实现里面的方法来监听输入情况等;
Clear Button; // 编辑时显示在右侧的删除按钮;
inputView; // 指定当UITextField获取焦点之后,弹出的输入视图;
inputAccessoryView; // UITextField获取到焦点之后的辅助视图(可用于自定义键盘);
[textField becomeFirstResponder]; // 手动打开键盘
// 设置内容对齐方式(此属性是UIControl的属性)
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; // 居中
UIImageView *leftView;
leftView.contentMode = UIViewContentModeCenter; // 设置leftView的内容居中;
textField.leftView = leftView; // leftView需要设置size属性;
textField.leftViewMode = UITextFieldViewModeAlways; // 左边的view永远显示;
监听文字改变,可以使用delegate代理,也可以通过监听通知:
UITextViewTextDidChangeNotification;
UITextView
hasText:是否包含文字
text属性只包括普通文本,attributedText包括显示在textView里面的所有内容;
// 设置字符选中范围
textview.selectedRange = NSMakeRange(20, 10);
// 算出选中的字符范围的边框
NSArray *rects = [textview selectionRectsForRange:textview.selcetedTextRange];
for(UITextSelectionRect *rect in rects){
}
UIButton
Highlighted Adjusts Image // 禁止高亮状态image调整;
adjustsImageWhenHighlighted
currentTitle; // 当前状态下的文字;
selected = YES | NO;
如果要去除UIButton的选中状态,可继承UIButton重写setHighlighted方法,置空该方法,不调用[super setHighlighted];
UIButton默认图标显示在左边,如果需要显示在其它位置,需要自定义UIButton并重写下面两个方法。
titleRectForContentRect:(CGRect)contentRect // 用于返回按钮上标题的位置;
imageRectForContentRect:(CGRect)contentRect // 返回图标在按钮上的位置;
按钮内容对齐方式
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // 左对齐
UISlider
UISlider是iOS中的滑块,多见于控制音量,进度等(官方指定大小为34);
UISlider和UIButton都是继承自UIControl的子类,能响应事件,通常我们使用valueChanged这种eventType来控制交互事件;有三个常用属性最大值,最小值,以及当前的值;
1.attribute
minimumValueImage // 指定滑块左边的横线为图片(同理右边为max,下不复述)
minimumTrackTintColor // 指定滑块左边的横线颜色
thumbTintColor // 滑块高亮状态颜色
currentThumbImage // 滑块thumbImage
2.function
-minimumTrackImageForState: //
-thumbImageForState: //
-setThumbImage:forState: //
UIToolBar
UIToolbar 上只能添加UIBarButtonItem;
UIDatePicker
常用属性
datePickerMode; // 日期模式;
local; // 显示语言;
设置选择改变监听事件
[datePicker addTarget:self action:@selector(test:) forControlEvents:UIControlEventValueChanged];
UIImageView
animationImages; // 一个动画图片数组,UIImageView可以播放多张图片;
animationDuration; // 动画时长,默认为1s;
animationRepeatCount; // 动画重复次数;
// 注意:播放多张图片,需要调用startAnimating来播放;
highlightImage; //
UIScrollView
1.UIScrollView无法滚动的可能原因
没有设置contentSize;
scrollEnabled = NO;
没有接收到触摸事件:userInteractionEnabled = NO;
没有取消autolayout功能,(要想scrollview滚动),在xcode5.x下必须取消autolayout;
2.重要属性
CGPoint contentOffset; // 内容相对于UIScrollView左上角的偏移量
UIEdgeInsets contentInset; // 内容的内边距
CGSize contentSize; // 内容的真实大小,某个方向上不希望滚动,则可以把该方向上的contentSize值设置为0
Bool bounces; // 弹簧效果
Bool ScrollEnabled; // 是否能滚动
Bool showHorizontalScrollIndicator; // 显示水平滚动条
alwaysBounceVertical = YES; // 垂直方向上有弹簧效果
3.通过UIScrollView实现缩放
向UIScrollView中添加内容(也就是指要进行缩放的内容)
设置缩放比例,最大、最小比例
通过代理监听缩放事件,在缩放事件中返回UIScrollView的某个子控件(这个子控件就是告诉UIScrollView对这个控件进行缩放)
4.分页
通过设置UIScrollView的pagingEnabled为YES,UIScrollView会被分成多个独立页面,分页的每一页宽度为UIScrollView的宽度;通常会配合UIPageControl增加分页效果;
5.滚动/自动滚动
通过定时器(NSTimer)实现自动滚动
UIAlertView
如果想要一个alertView显示文本框,则需要修改alertView的样式;
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
[alertView textFieldAtIndex:0]; // 根据索引获取alertView中指定的某个文本框
UIActionSheet
UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"title" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles: nil];
[sheet showInView:];
UIActivityIndicatorView
默认情况下不会滚动,如果需要它自动滚动,需要勾选Behavior的Animating属性;
UIPageControl
numberOfPages; // 页数
currentPage; // 当前页
hidesForSinglepage; // 只有一页时,是否需要隐藏页码指示器
pageIndicatorTintColor; // 页码指示器颜色
currentPageIndicatorTintColor; // 当前页码指示器颜色
通过KVC改变_currentPageImage和_pageImage;
UIPickerView
UIPickerView有默认的frame属性,它的高度是固定的;
常用代理方法:
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// 返回列数;
-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
// 返回指定component列的行数;
-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
// 指定的某行某列需要显示的字符串内容;
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
// 某一行被选中的回调事件,只有通过手指选中某一行的时候才会被调用;
[pickerView selectRow:1 inComponent:0 animated:YES]; // 使pickerView主动选中某一行,该方法不会触发pickerView:didSelectRow:inComponent:;
[pickerView selectedRowInComponent:0]; // 获取某一列的当前被选中行;
[pickerView reloadAllComponents]; // 重新加载全部数据;
[pickerView reloadComponent:]; // 重新加载指定列的数据;
自定义UIPickerView的指定行和指定列的View,最后一个参数是当有可以重用的view的时候,会把该view自动传回来;自定义UIView时,可以不指定它的宽高,它有默认的宽高;
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component // 返回指定的某一列的行高
本文详细介绍了iOS中的UIView,包括其重要属性、常见方法、initWithCoder和awakeFromNib的区别,以及如何处理代理delegate。此外,还探讨了UILabel、UITextField、UITextView、UIButton等常见子类的特性和使用技巧,如去除UIButton选中状态、实现UIScrollView的滚动与缩放功能。

5730

被折叠的 条评论
为什么被折叠?



