++ 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」];

推荐阅读:

相关文章