
scrollView:
1 介绍scrollView一些属性
1>要想使用scrollView必须做两件事
1)设置scrollView内容
2)设置contentSize (滚动范围)
2>其他属性
1) contentOffset(滚动位置)
2) contentInset(额外增加的滚动区域)
3) bounces (设置UIScrollView是否需要d簧效果)
4) crollEnabled (设置UIScrollView是否能滚动)
5) showsHorizontalScrollIndicator (是否显示水平滚动条)
6) showsVerticalScrollIndicator (是否显示垂直滚动条)
2 代理
1>代理思想两个思想
1)监听思想:B监听A发生了什么事情
2)通知思想:A发生了一些事情,要通知B去做
2>scrollView的代理使用
1)如何成为代理(三步)
声明协议 设置代理对象selfscrollViewdelegate = self; 实现协议方法
2)代理监听scrollView的拖拽事件
// 开始拖拽 - (void)scrollViewWillBeginDragging:(UIScrollView )scrollView; // 结束拖拽 - (void)scrollViewDidEndDragging:(UIScrollView )scrollView willDecelerate:(BOOL)decelerate; // scrollView滚动时执行 - (void)scrollViewDidScroll:(UIScrollView )scrollView
3)用代理实现缩放
成为UIScrollView的代理() 设置缩放对象(通过viewForZoomingInScrollView方法) 设置缩放为范围(maximumZoomScale、minimumZoomScale)
3 定时器创建两种方式
1> selftimer = [NSTimer scheduledTimerWithTimeInterval:1f target:self selector:@selector(方法) userInfo:nil repeats:YES]; 当另一个scrollView运行时,会停止定时器的scrollView,只能执行一个scrollView
2> selftimer = [NSTimer timerWithTimeInterval:1f target:self selector:@selector(方法) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:selftimer forMode:NSRunLoopCommonModes];
4 自定义协议并使用
1>定义协议(三步)
定义protocol(两种optional[代理对象可不实现]、required[代理对象必须实现])
增加代理属性(weak) @property (weak, nonatomic) id<LFAppInfoViewDelegate> delegate;
给代理发消息,调用代理的方法(需要判断代理对象是否实现了该方法,不判断调用后(编译时不会)会报错) 注意:定义协议的名称命名[类名+Delegate]、协议方法的命名规范[方法名称需要去掉前缀,并且将自己作为参数]
2>使用代理(三步)
声明协议
设置代理对象
实现协议方法(本例是在代理对象[控制器] 添加一个UILabel)
tableView:
1 UITableView 需要设置数据源才能显示数据
1>会向数据源查询一共多少组,每组多少行,每行显示什么数据
2>数据源必须遵守UITableViewDateSource协议
3> 一共有多少组
- (NSInteger)numberOfSectionsInTableView:(UITableView )tableView{} 第section组有多少行
- (NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section{} 每一行显示什么内容
- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath{} 第section组头部显示什么标题 - (NSString )tableView:(UITableView )tableView titleForHeaderInSection:(NSInteger)section{} 第section组底部显示什么标题
- (NSString )tableView:(UITableView )tableView titleForFooterInSection:(NSInteger)section{} 当每一行的cell的高度不一致的时候就使用代理方法设置cell的高度
- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{} 当每一行的cell高度一致的时候使用属性设置cell的高度
selftableViewrowHeight = 60; 可以优化内存的可变数组定义
NSMutableArray models = [NSMutableArray arrayWithCapacity : (NSUInteger)]
2 cell常见属性
1>celltextLabeltext 标题
2>celldetailTextLabeltext 介绍
3>cellimageViewimage
4>cellaccessoryView 辅助视图
5>cellaccessoryView 自定义辅助视图
6>cellbackgroundView 设置cell的背景颜色
1)通过backgroundColor 和 backgroundView都可以设置cell的背景
2)但是backgroundView 的优先级比 backgroundColor的高
3)所以如果同时设置了backgroundColor和backgroundView, backgroundView会盖住backgroundColor
7>cellselectedBackgroundView 设置选中状态的背景
3 UITableView常见属性
1> tableviewseparatorStyle 设置分割线样式
2> tableviewseparatorColor 设置分割线颜色 自定义颜色
[UIColor colorWithRed:色值/255f green:色值/255f blue:色值/255f alpha:色值/255f];
获取屏幕宽度: [UIScreen mainScreen]boundssizewidth;
3> tableviewtableHeaderView 设置tableView的头部视图 一般用于放广告
4> tableviewtableFooterView 设置tableView的底部视图 一般用于放置加载更多按钮
5> [selftableView reloadData]; 刷新表格 // 刷新指定行
NSIndexPath path = [NSIndexPath indexPathForRow:row inSection:0]; [selftableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];
4 优化cell的方法
1>先去缓存池中查找是否有满足条件的Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifier:identifier];
2>如果缓存池中没有符合条件的cell,就自己创建一个Cell if (nil == cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; }
3>创建Cell, 并且设置一个唯一的标记 : identifier 注 : 定义变量 NSString identifier 推荐用 static定义静态局部变量,不推荐用宏
4>设置cell数据并返回cell
5 tableView代理方法
1> - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath{} //当某一行被选中的时候调用
2> - (void)tableView:(UITableView )tableView didDeselectRowAtIndexPath:(NSIndexPath )indexPath{} //当某一行取消选中的时候调用
3> UIAlertView的一些属性和代理方法
1) UIAlertView alert = [[UIAlertView alloc] initWithTitle:@"修改数据" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; //创建一个d窗
2) alertalertViewStyle = UIAlertViewStyle; //设置alert的样式, 让alert显示出uitextfield
3) UITextField textField = [alert textFieldAtIndex:0]; //获取alert中的textfield
4) [alert show]; //显示d窗
5) - (void)alertView:(UIAlertView )alertView clickedButtonAtIndex:(NSInteger)buttonIndex{} // alertView的按钮被点击的时候就会调用
6 自定义cell两种方式
1> 纯代码:每个cell子控件的个数和位置不一样
2> 通过xib: cell一样且固定的界面 加载xib的方式:
1) [[[NSBundle mainBundle] loadNibNamed:@"xib名" owner:nil options:nil] firstObject];
2)UINib nib = [UINib nibWithNibName:@"xib名" bundle:nil]; UIView view = [[nib instantiateWithOwner:nil options:nil]firstObject]; 3> 延迟调用 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ }); 4>init方法只有通过代码创建控件的时候才会调用; awakeFromNib方法在控件通过xib或者storyboard创建的时候才会调用
5> 协议规范 协议名称 : 控件名称 + Delegate 协议方法名称:控件名称去掉前缀 + 含义 在协议方法中将自己(触发发放的)控件传出去的目的是方便用于区分哪个控件触发了该方法
6> 代码创建的子控件,添加到contentView中 [selfcontentView addSubview:子控件];
7> 计算文字宽高 CGSize maxSize = CGSizeMake(300, MAXFLOAT); // 设置文字范围 NSDictionary dict = @{NSFontAttributeName : font}; // 字体 // 如果将来计算的文字的范围超出了指定的范围,返回的就是指定的范围 // 如果将来计算的文字的范围小于指定的范围, 返回的就是真实的范围 CGSize size = [NSString str boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil]size; // 计算文字宽高
8>通过代码自定义cell的方法
1)新建一个继承自UITableViewCell的类
2)重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame, 子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的)
3)提供2个模型 数据模型: 存放文字数据\数据 frame模型: 存放数据模型\所有子控件的frame\cell的高度 4)cell拥有一个frame模型(不要直接拥有数据模型)
5)重写frame模型属性的setter方法: 在这个方法中设置子控件的显示数据和frame
6)frame模型数据的初始化已经采取懒加载的方式(每一个cell对应的frame模型数据只加载一次)
7 通知机制
1> 通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 创建通知中心 NSNotificationCenter center = [NSNotificationCenter defaultCenter];
2> 一个完整的通知一般包含3个属性: - (NSString )name; // 通知的名称 - (id)object; // 通知发布者(是谁要发布通知) - (NSDictionary )userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)
3> 初始化一个通知(NSNotification)对象 + (instancetype)notificationWithName:(NSString )aName object:(id)anObject; + (instancetype)notificationWithName:(NSString )aName object:(id)anObject userInfo:(NSDictionary )aUserInfo; - (instancetype)initWithName:(NSString )name object:(id)object userInfo:(NSDictionary )userInfo;
4> 通知中心(NSNotificationCenter)提供了相应的方法来发布通知 - (void)postNotification:(NSNotification )notification; // 发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等 - (void)postNotificationName:(NSString )aName object:(id)anObject; // 发布一个名称为aName的通知,anObject为这个通知的发布者 - (void)postNotificationName:(NSString )aName object:(id)anObject userInfo:(NSDictionary )aUserInfo; // 发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息
5>注册通知监听器(Observer) - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString )aName object:(id)anObject; observer:监听器,即谁要接收这个通知 aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入 aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知 anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知
6> 取消注册通知监听器 通知中心不会保留(retain)监听器对象,在通知中心注册过的对象,必须在该对象释放前取消注册。否则,当相应的通知再次出现时,通知中心仍然会向该监听器发送消息。因为相应的监听器对象已经被释放了,所以可能会导致应用崩溃 - (void)removeObserver:(id)observer; - (void)removeObserver:(id)observer name:(NSString )aName object:(id)anObject; 一般在监听器销毁之前取消注册(如在监听器中加入下列代码): - (void)dealloc { //[super dealloc]; 非ARC中需要调用此句 [[NSNotificationCenter defaultCenter] removeObserver:self]; }
7> 通知和代理的选择
1)共同点
利用通知和代理都能完成对象之间的通信
2)不同点
代理 : 一对一关系(1个对象只能告诉另1个对象发生了什么事情)
通知 : 多对多关系(1个对象能告诉N个对象发生了什么事情, 1个对象能得知N个对象发生了什么事情)
8 键盘通知 UIKeyboardWillShowNotification // 键盘即将显示 UIKeyboardDidShowNotification // 键盘显示完毕 UIKeyboardWillHideNotification // 键盘即将隐藏 UIKeyboardDidHideNotification // 键盘隐藏完毕 UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变 UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕 附带跟键盘有关的额外信息(字典),字典常见的key如下: UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后) UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间 UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢) 9 其他 1> 子控件不显示排错方法
1)查看是否调用添加的方法
2)frame为空(没有设置frame)
3)hidden 是否为yes
4)alpha <=01
5)没有添加到父控件中
6)查看夫控件有没有以上几点 但凡在init方法中获取到的frame都是0 - (void)layoutSubviews { [super layoutSubviews]; // 该方法在控件的frame被改变的时候就会调用 // 该方法一般用于调整子控件的位置 } 2> // 已经被添加到父视图上的时候会调用 - (void)didMoveToSuperview { } // 即将被添加到父视图上的时候会调用 - (void)willMoveToSuperview:(UIView )newSuperview { }
3> UITextField中添加左右视图 selftextFieldleftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)]; // 设置左边视图的显示模式 selftextFieldleftViewMode = UITextFieldViewModeAlways; selftextFieldrightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 0)]; // 设置右边视图的显示模式 selftextFieldrightViewMode = UITextFieldViewModeAlways;
4> // 设置btn中的不填充整个imageview btnimageViewcontentMode = UIViewContentModeCenter; // 超出范围的不要剪切 // btnimageViewclipsToBounds = NO; btnimageViewlayermasksToBounds = NO;
Excel当中,用于实现锁定表格的行和列的功能。 当我们在制作一个Excel表格时,如果列数较多,行数也较多时,一旦向下滚屏,则上面的标题行也跟着滚动,在处理数据时往往难以分清各列数据对应的标题,事实上利用"冻结窗格"功能可以很好地解决这一问题。具体方法是将光标定位在要冻结的标题行(可以是一行或多行)的下一行,然后选择“窗口|冻结窗格”即可。滚屏时,被冻结的标题行总是显示在最上面,大大增强了表格编辑的直观性。
通俗一点就是说我们在表格中滚动鼠标滚轮或是拖动滚动条时,被冻结的行或列不会受到滚屏,不得不说此功能大大的帮我们改善了视觉混乱问题。下面我将通过实例为大家说明这项功能的 *** 作方法,相信大家能进步的更快。
方法/步骤
一、锁定表格的行的功能
1、选中第1行,然后单击“视图”选项卡,在“窗口”组中点击“冻结窗格”按钮,接着选择“冻结拆分窗格”。
2、出现如图所示两条黑色实线,然后“视图”选项卡,在“窗口”组中点击“冻结窗格”按钮,接着选择“冻结首行”。然后鼠标滚动滚轮上下就实现首行不动,其他行跟随移动。
二、锁定表格的列的功能
1、选中第1行,然后单击“视图”选项卡,在“窗口”组中点击“冻结窗格”按钮,接着选择“冻结拆分窗格”。
2、出现如图所示两条黑色实线,然后“视图”选项卡,在“窗口”组中点击“冻结窗格”按钮,接着选择“冻结首列”。然后鼠标单击左右三角形滑块就实现首列(本表案例中序号列)不动,其他列跟随移动。
以上就是EXCEL 如何让表格的首行或首列固定不动不滚动方法介绍,希望能对大家有所帮助!
Excel滚动条太小怎么拉长 Excel中数据很多,导致Excel表格里的垂直滚动条和水平滚动条变的很小,想拉长该怎么办?下面分享Excel表格滚动条设置方法,需要的朋友可以参考下。
一、Excel表格里水平滚动条调节
2、同理,选中开始没有数据后的一行。
3、按快捷键 ctrl+shift+→ ,快速选中 刚选中的那一行至最后一行。
4、右键删除之后,保存,即可看到水平滚动条变很宽啦。
二、Excel表格里垂直滚动条调节
1、打开需要调节垂直滚动条的Excel表格。这时假设表格的垂直滚动条非常小。
2、选中开始没有数据后的一行。垂直滚动条变小,是因为“表格”以为你的数据已经需要编辑到最底部了,其实你的数据可能只有几百行,所以从几百行后没有数据的一行选中。
3、按 crtl+shift+↓。按此快捷键,选中没有数据的一行到表格底部的几几万行的表格,方便做下一步 *** 作。
4、右键——删除。目的是告诉“表格”下面几几万行的数据都用不到,删除这些数据,只 *** 作现有的几百行数据而已,滚动条不要那么小。
5、ctrl+S 保存。保存以后,就可以看到垂直滚动条变大了好多,滑动试试,可以快速定位到想要编辑的数据行哦。
您可以使用WPS表格的开发工具选项中的滚动条选项来实现部分滚动可见。具体步骤如下:
打开WPS表格,进入到WPS表格的 *** 作界面。
点击开发工具选项,在其内找到滚动条选项。
选择滚动条在表格内画出需要的滚动条。
双击滚动条选项进入其属性 *** 作界面,在该界面内我们设置滚动条的颜色。
点击退出设计选项,即可拉动页面都显示区域。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)