+xib
xib文件实质是一个xml文件,类似于android用于描述界面;要先设置File’s Owner中的class属性(目的是在xib中能找到Owner中的方法,类似android中xml与View的绑定);并建立File’s Owner跟控件间的联系
[[NSBundle mainBundle] loadNibNamed:@"RowView" owner:self options:nil]
加载过程:
解析xib的xml文件 —-> 创建Objects下所有对象(xml所有控件)—->根据xml的控件及设定的属性生成设置的相关代码(同手动创建控件的一样)—->添加连线的事件(同手动用代码创建的一样)—-> 返回创建好的对象数组
[即是解析xib文件,根据xml描述生成创建控件、设置属性、添加事件的代码,并放在一个数组中返回]
[但一般不用xib的File’s Owner绑定控件中的事件,这样耦合度高。使该View不能被其他ViewController使用;可使用Tag取得控件并添加事件;但常用的是MVC模式,即一个xib用一个view来控制(类似于android中创建一个view.xml然后创建一个View类,通过该View类控制view的生成及数据填充)如下:
+(id)rowView{
//可在这里面设置图标和label
return [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:nil options:nil][0];
}
+(id)rowView:(NSString *)icon name:(NSString *)name{
UIView *view = [RowView rowView];
UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
[iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
nameLabel.text = name;
return view;
}
也可不用viewWithTag与寻找控件,可直接绑定控件到xib
1、将File’s Owner的class置空;
2、设置View的class为创建的view名(RowView);将View下的控件与列表中出现的属性名连线绑定;
+(id)rowViewIcon:(NSString *)icon withName:(NSString *)name{
RowView *view = (RowView *)[RowView rowView];
// UIButton *iconBtn = (UIButton *)[view viewWithTag:1];
[view.iconBtn setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
// UILabel *nameLabel = (UILabel *)[view viewWithTag:2];
view.nameLable.text = name;
return view;
}
+UIScrollView
scroll.showsVerticalScrollIndicator :滚动条
scroll.bounces;//弹簧效果
scroll.contentInset://在指定的方向上增加额外的区域
scroll.contentSize://滚动范围
scrollView.contentOffset://scrollView滚动的位置,可用代码来控制图片滚动及分页的索引
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@“2.jpg”]];//可直接创建带图片的imageView,创建出来的imageView默认和图片的宽高一样
说明:-True-YES-true
objective-c 中的BOOL 实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。
注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。
问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。
+UITableView
如 android 中的ListView,但功能比ListView强大(类似android中的ExpendListView);
设置数据源:实现代理:<UITableViewDataSource>
方法:
#pragma mark 数据源方法,第section组一共多少行,,若不实现,默认就是一组
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
#pragma mark 一共多少组(类似android的getCount)
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#pragma mark 返回每一行显示的内容(类似android中Adapter中的getView)
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 返回每一行的头部标题
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
#pragma mark 返回每一行的尾部注释
-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
#pragma mark 返回右边的索引列表
-(NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
//设置右边的图片,此处是没向右的箭头
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//自定义右边的图片,此处是为一个加号
cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd;
#pragma mark 取消选中该行
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
+单组展示 +设置组数为1即可
UITableViewDelegate为table的代理方法可高,可设置列表的高宽
#pragma mark 设置每一行的高度,UITableViewDelegate下的代理方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+对话框+(类似android)
alert.alertViewStyle =UIAlertViewStyleLoginAndPasswordInput;//自带两个输入框,用户名和密码
[alert textFieldAtIndex:0].text =name;//访问每一个文本框并设值
//使用自定义的xib的view,但创建的rowItem须指定Custom Class为自己的Cell类型
[_tableView registerNib:@"rowItem" forCellReuseIdentifier:@"key”];
博客地址:IOS开发学习笔记(二)