- 对xib文件的处理
特别注意: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];
}];
}