前言
本周仿写了3GShare,在这个demo中学到了许多新知识也运用了许多先前学过的知识,下面就做个总结吧
登录、注册页面
注册页面:
登录页面:
登录和注册界面主要用到的是属性传值和协议传值,在注册页面输入账号和密码后通过协议将值传递到登录页面,在登录页面再次注册时将先前的值保存下来再传递到注册页面来判断是否已经注册过。
需要注意的就是保存账号和密码的数组如果在注册页面进行初始化的话,当确认注册后返回登录界面再次注册时,先前初始化的数组就会被重新初始化,也就是说原来保存的账号和密码会被初始化掉。
解决方法就是在登录页面进行数组初始化并通过属性传值将数组传递到注册页面。
- (void)pressRigister {
RigisterViewController* rigisterViewController = [[RigisterViewController alloc] init];
rigisterViewController.delegate = self;
rigisterViewController.countArr = self.myCount;
rigisterViewController.passArr = self.myPass;
rigisterViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:rigisterViewController animated:YES completion:nil];
}
主页界面
主页部分主要由轮播图和自定义cell组成。需要注意的点有在首页自定义cell里的点赞数要与展开界面里的点赞数实现互动并且能同步。
我的解决方法是在首页cell将点赞数通过属性传值传递到展开页面,在展开页面通过协议传值将点赞数传回首页cell。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 1) {
if (indexPath.row == 0) {
SubFirstViewController* subFVC = [[SubFirstViewController alloc] init];
self.cell = [self.tableView cellForRowAtIndexPath:indexPath];
self.cell.tag = 101;
subFVC.likeNum = self.cell.likeLabel.text;
subFVC.delegate = self;
[self.navigationController pushViewController:subFVC animated:YES];
} else if (indexPath.row == 1) {
SubSecondViewController* subSVC = [[SubSecondViewController alloc] init];
self.cell = [self.tableView cellForRowAtIndexPath:indexPath];
self.cell.tag = 102;
subSVC.likeNum = self.cell.likeLabel.text;
subSVC.delegate = self;
[self.navigationController pushViewController:subSVC animated:YES];
} else {
SubThirdViewController* subTVC = [[SubThirdViewController alloc] init];
self.cell = [self.tableView cellForRowAtIndexPath:indexPath];
self.cell.tag = 103;
subTVC.likeNum = self.cell.likeLabel.text;
subTVC.delegate = self;
[self.navigationController pushViewController:subTVC animated:YES];
}
}
}
- (void)returnLike:(NSString*)likeRenum {
NSLog(@"传回值为:%@", likeRenum);
[self.tableView viewWithTag:101];
self.cell.likeLabel.text = likeRenum;
}
- (void)returnLike02:(NSString*)likeRenum {
NSLog(@"传回值为:%@", likeRenum);
[self.tableView viewWithTag:102];
self.cell.likeLabel.text = likeRenum;
}
- (void)returnLike03:(NSString*)likeRenum {
[self.tableView viewWithTag:103];
self.cell.likeLabel.text = likeRenum;
}
搜索页面
搜索页面主要是UItextField和UIButton控件。这个页面实现比较简单就不细说了。
接着就是搜索页面的上传功能。
这个页面最重要的就是照片墙和折叠cell。
关于照片墙,主要用到的就是协议传值,将照片墙选中图片的最后一张通过协议传给前一界面。我的方法是将选中的图片的button的selected设置为YES,将为选中的设置为NO,通过遍历来确定选中的照片数和最后选中的照片。
- (void)pressSelect:(UIButton*)btn {
if (btn.selected == YES) {
UIImage* sureImage = [UIImage imageNamed:@"my_button_normal.png"];
self.sureImageView = [[UIImageView alloc] initWithImage:sureImage];
self.sureImageView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width / 3 - 40, 0, 20, 20);
[btn addSubview:self.sureImageView];
btn.selected = NO;
count--;
} else {
UIImage* sureImage = [UIImage imageNamed:@"my_button_pressed.png"];
self.sureImageView = [[UIImageView alloc] initWithImage:sureImage];
self.sureImageView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width / 3 - 40, 0, 20, 20);
[btn addSubview:self.sureImageView];
btn.selected = YES;
count++;
}
}
对于折叠cell,就是通过改变tableView的高度来实现cell的折叠与展开。具体来说就是先将tableView的高度设置为一个cell的高度,通过按钮或其他控件来将tableView的高度设置为能显示全部cell1的高度(展开)和一个cell的高度(收缩)。
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(200, 120, 120, 40) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.userInteractionEnabled = YES;
[self.tableView registerClass:[FoldCustomCell class] forCellReuseIdentifier:@"indentifierFold"];
[self.scrollView addSubview:self.tableView];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 4;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 40;
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
FoldCustomCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"indentifierFold"];
cell.foldLabel.text = self.array[indexPath.row];
return cell;
}
- (void)pressChange:(UIButton*)btn {
CGFloat red = (CGFloat)0x10 / 255.0;
CGFloat green = (CGFloat)0x96 / 255.0;
CGFloat blue = (CGFloat)0xdb / 255.0;
UIColor *color = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:1.0];
if (btn.selected == YES) {
self.tableView.frame = CGRectMake(200, 120, 120, 40);
btn.backgroundColor = color;
btn.selected = NO;
} else {
self.tableView.frame = CGRectMake(200, 120, 120, 40 * 4);
btn.backgroundColor = [UIColor whiteColor];
btn.selected = YES;
}
}
为了让选中的cell成为第一个cell并且不能让原来的第一个cell的内容消失,可以将选中的cell和第一行的cell进行交换
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
FoldCustomCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
NSString* str = [NSString stringWithString:cell.foldLabel.text];
for (int i = 0; i < 4; i++) {
if ([str isEqualToString:self.array[i]]) {
self.array[i] = self.array[0];
break;
}
}
self.array[0] = str;
[self.tableView reloadData];
}
文章页面
文章页面主要就是滚动视图和分段控制器,实现比较简单就不细说了。
活动页面
这个页面就是一个数据视图(UITableView),实现比较简单。
我的页面
这个页面的制作比较繁琐,最重要的就是保存推出的视图的数据。
我的解决办法是在推出页面的前一个页面创建该视图控制器并确保只创建一次,这样在切换视图的时候就不会刷新视图了。
if (self.setMessageViewController == nil) {
self.setMessageViewController = [[SetMessageViewController alloc] init];
}
[self.navigationController pushViewController:self.setMessageViewController animated:YES];
总结
以上就是本篇文章的全部内容,需要用到最重要的就是多界面传值。