iOS UIView

本文详细介绍了iOS中的UIView,包括其重要属性、常见方法、initWithCoder和awakeFromNib的区别,以及如何处理代理delegate。此外,还探讨了UILabel、UITextField、UITextView、UIButton等常见子类的特性和使用技巧,如去除UIButton选中状态、实现UIScrollView的滚动与缩放功能。

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  // 返回指定的某一列的行高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值