您的位置:首页 > 移动开发 > IOS开发

IOS 常用技术

2015-06-08 22:50 686 查看
对xib文件的处理

xib的加载可以通过 [NSbundle maibundle] loadnibnamed :(NSString*)str owner:(NSString)temp dic(NSDictionary*)dic 加载 xib的fileowner文件。 然后通过下标得到sub 。 如果要获取xib中固定的view,则可以通过viewwithtag获取。 如果是一个则可以firstobject。

特别注意:xib的某个view对应的类文件,uiview uiviewcontroller等不同。所有xib中的子视图需要加入到根视图控制器的视图中。xib的类文件加载,即[xx alloc ] loadnibnamed 该方法是通过类加载。单线程。上面的是包加载。

如果xib中的view需要在外部更改,即视图可变。则需要IbOutlet连线。连线有问题,右键superview 即可。有错误提示 警告符号。xcode连线的bug。automatic中的h文件不一定是xib对应的.h文件。mathamatic才是正确的。

2. MVC模式,M V通过C来中转,可以使用KVC key value code 。 Controller通过模型加载外部数据(setvaluesforkeys dic[可变数组]), 然后再controller展示数据给view。

3.懒加载,视图中的子视图内容需要经常刷新,而且对应属性位置只需要设定一次。需要self.label = self label(调用get方法)。自定义属性一般是strong,需要指向强引用的ui,[ [uibutton alloc ]init].

特别注意上面截图中的 _icon 不调用 self icon (即get方法,即不实例化,alloc)。 如果icon本身没有数据,则_icon会为nil.而self.icon会alloc init实例化

4.动画,首尾动画,块动画。比如图片浏览器放大缩小功能。

5.代码自动布局,约束。 self.frame在父视图中的宽高(宽高可变,同时x,y的实际位置跟superview的bounds(决定子视图对应其父视图的原点)有关,同时也跟self.center有关) self.bounds自身控件的宽高[固定,跟superview无关]。 OC语言自动布局时 切忌在 height = height-20.自身调用的问题。

错误方法:直接修改结构体属性

正确方法:简单修改结构体属性。

界面上的控件有些有规律而且比较多,纯代码写。界面上添加控件需要连线,复制,容易出错。

6.常用控件,UIButton初始化不需要alloc ,btn可以设置image 和title。两个view并排. .type = custom所有属性自己修改。



7.快捷键 alt+shift + ->选中右边的单元

继承自nsobject

8.选中方法列表,直接输入view将展示匹配的方法.

9.高级Ui, 比如dwtaglist做搜索标签

10.

监听变化

__weak typeof(self) weakSelf = self;
[self.myTableView addLegendFooterWithRefreshingBlock:^{
[weakSelf createHTTPReauestBlock];
}];

#pragma mark - 初始加载
/**
* isAddReplyToRefresh
判断是否是回复
*/
-(void)createHTTPReauestBlock:(NSString *)str IsAddReplyToRefresh:(BOOL)isAddReplyToRefresh{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];//持续监听
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

//显示加载提醒,并关闭左右导航栏按钮
[self show];
NSDictionary *dic = @{@"TopicID":self.topicIDString,@"Floor":str,@"Version":@"1.0",@"SystemNum":@"IOS"};
NSLog(@"%@",dic);
__weak typeof(self) weakSelf = self;
[manager POST:SelectTopicDetailURL parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];//请求到数据后断开监听
NSLog(@"list
请求成功 json %@",responseObject);
NSString *html = operation.responseString;
NSData *data1 = [html dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];//解析
[weakSelf hide];
weakSelf.myTableView.footer.hidden = NO;

//删除之前的数据
if (weakSelf.dataArray.count != 0) {
[weakSelf.dataArray removeAllObjects];
}


for (NSDictionary *dic in [data objectForKey:@"list"]) {
PostDetailModel *model = [[PostDetailModel alloc] init];
[model setValuesForKeysWithDictionary:dic];
if (model.Floor == 0) {//楼主信息
firstModel = model;
self.ParentID = firstModel.ParentID;
}else{//他人评论
[weakSelf.dataArray addObject:model];
}
}


if (isAddReplyToRefresh) {
//回复成功
self.ReplyNum++;//评论数加1
self.pageNumber = 2;//下次上拉后继续
}

//添加表头视图
[self AddContentToTableHeaderView:firstModel];

[weakSelf.myTableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSLog(@"list请求出错了");
[weakSelf hide];
}];

#pragma mark - 上提加载
- (void)createHTTPReauestBlock{


[self show];
if (self.pageNumber == 20) {
[self.myTableView.footer endRefreshing];
self.myTableView.tableFooterView=[[UIView alloc] initWithFrame:CGRectZero];
// self.myTableView.estimatedSectionFooterHeight = 0;
[self hide];
[self createPtompt:@"未加载到更多的数据~"];
return;
}
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

//显示加载提醒,并关闭底部固定视图
[self show];
NSDictionary *dic = @{@"TopicID":self.topicIDString,@"Floor":[NSString stringWithFormat:@"%ld",(long)self.pageNumber],@"Version":@"1.0",@"SystemNum":@"iOS"};
NSLog(@" dicdicdic %@",dic);


__weak typeof(self) weakSelf = self;
[manager POST:SelectTopicDetailURL parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSLog(@"list
请求成功 json %@",responseObject);
NSString *html = operation.responseString;
NSData *data1 = [html dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dictionary+++++ %@",data);
[weakSelf hide];
[weakSelf.myTableView.footer endRefreshing];
if ( [[data objectForKey:@"list"] count] == 0 ) {
weakSelf.pageNumber = 20;
[weakSelf createPtompt:@"未加载到更多的数据~"];
return;
}


weakSelf.pageNumber = weakSelf.pageNumber + 1;
for (NSDictionary *dic in [data objectForKey:@"list"]) {
PostDetailModel *model = [[PostDetailModel alloc] init];
[model setValuesForKeysWithDictionary:dic];
if (model.Floor == 0) {//楼主信息
firstModel = model;
self.ParentID = firstModel.ParentID;
}else{//他人评论
[weakSelf.dataArray addObject:model];
}


}
[weakSelf.myTableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSLog(@"list请求出错了");
[weakSelf hide];
[weakSelf.myTableView.footer endRefreshing];
}];


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: