【iOS】——暑假第二周3Gshare总结

3Gshare总结

在这周完成了3Gshare的demo,3Gshare的难度和代码量都和仿写网易云相比有了很大的提升,在这个过程中遇到了很多问题和bug,在解决问题的过程中也学到了很多。

1.启动页

首先启动页写法和网易云时启动页写法相同,设定定时器对界面进行计时,即使结束后跳转到下一界面,具体写法可以参考网易云博客。
请添加图片描述

2.登录注册

在进入app主界面之前,先要进行注册账号和登录账号,在这里运用到了协议传值,将注册好的账号和密码通过数组或者字典传回登陆界面,在这块我刚开始用的是两个字符串进行传值,这样传值的话就只能注册一次,但是按照要求,如果我连续注册两次,那么应该两次的账号和密码都可以完成登录,而且注册界面必须要有一个判断,如果我两次注册的账号相同,应该给出警告。
请添加图片描述

//注册完成
- (void)presszhuce {
    int boo = 0;
    for (int i = 0; i < _zhanghaoarray.count; i++) {
        if ([_zhanghaoarray[i] isEqualToString:_secondTextField.text]) {
            boo = 1;
            break;
        }
    }
    if (boo == 1) {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"警告" message:@"账号已经注册过" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *sure = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:sure];
        [self presentViewController:alertController animated:YES completion:nil];
    } else {
        [_zhanghaoarray addObject:_secondTextField.text];
        [_mimaarray addObject:_thirdTextField.text];
        [_delegate zhuce:_zhanghaoarray:_mimaarray];
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    _firstTextField.text = nil;
    _secondTextField.text = nil;
    _thirdTextField.text = nil;
}

关于协议传值可以看上一节博客:
iOS——协议传值和属性传值

3.导航栏上侧白条

在写网易云的时候,因为导航栏都是白色的,所以不会遇到该问题,3Gshare的导航栏要求是蓝色,如果通过导航栏的barTintColor和backgroundColor对导航栏颜色进行赋值,导航栏的上方还会有一行白条,如图:
在这里插入图片描述

对于这种情况有以下解决方案:

UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];

[appearance configureWithOpaqueBackground];
//newblue为自己设定的颜色
appearance.backgroundColor = newblue;
    
appearance.shadowColor = [UIColor clearColor];

FirstNavigationController.navigationBar.standardAppearance = appearance;

FirstNavigationController.navigationBar.scrollEdgeAppearance = FirstNavigationController.navigationBar.standardAppearance;

4.自动滚动视图

在刚开始给滚动视图加定时器的时候,如果在自动轮播的过程中对其进行拖拽的话,定时器就会出现错乱,因此要在滚动视图开始拖拽时令其定时器停止,在滚动视图停止拖拽时,重新启动:

//滚动视图开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    if (scrollView.tag == 1) {
        [_timer invalidate];
        _timer = nil;
    }
}
//滚动视图停止拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    if (scrollView.tag == 1) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timeOut:) userInfo:nil repeats:YES];
    }
}

除此之外,可以看到在令定时器开始和停止的时候,首先判断了滚动视图的tag值,因为在滚动视图这一页,有一个tableView,tableView是滚动视图的子类,如果不对两个滚动视图的tag进行赋值,在对tableView进行拖拽时,可能也会对定时器有所影响,可能会造成滚动视图错乱。
还有一个非常重要的一点,在给自定义cell里的滚动视图添加图片时,我把添加图片的代码放在了:

- (void)layoutSubviews;

这个函数里,在这个函数里对图片进行了初始化然后添加,这种情况当滚动视图轮播时就会造成如下问题:
请添加图片描述

这个与layoutSubviews函数机制有关,会把图片初始化好多遍,由此要明白一点,在自定义cell时,对cell里元素的初始化最好放在:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

这个函数里,如果要放在layoutSubviews函数里,一定要给他添加上判断条件,令其只初始化一次。

5.折叠cell

在发布图片界面有一个折叠cell,折叠cell就要求通过按钮的点击,让tableView的大小发生改变,并且让cell里的元素顺序也要发生改变。
在这里插入图片描述
在这里插入图片描述

对于这样的要求,我们对左侧的button的tag赋值,如果按钮按下,就改变其tag值,然后对按钮的tag值判断,从而在tableView的方法里对其修改属性:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_cellbutton.tag == 1) {
        return 1;
    } else {
        return 4;
    }
}

还要注意一点,对cell里面的text赋值时,用一个可变数组赋值,在点击cell改变cell里文字时,对可变数组的顺序也要改变,将选中的cell的text放在第一个。

6.上传图片

请添加图片描述
请添加图片描述
在这里用到了协议传值,在选择图片界面,选择好要发布的图片,将选择好的图片的数量和最后一张图片的名称传回上一界面,此时将图片和图片的数量展示在相应位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值