推广

iOS 如何循环遍历cell

iseeyu2年前 (2024-02-21)推广135

题:输入完成如何获取用户输入的内容?

先在UITableViewCell的.h文件中声明属性

@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) UITextView *textView;

在提交时循环遍历获取:

- (void)save{
    for (int i = 0; i < 6; i++) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
        NSString *stirng = cell.textFiled;
    }
}

如果你这样做了,那你从一开始就错了,因为cellForRowAtIndexPath只能获取到屏幕可见范围内的cell,一旦输入条件增加,超出屏幕之后,就获取不到这个cell。

并且你还需要解决由于重用引起的一系列问题,没问题你也不会搜这种文章,我也是踩坑过来的,这里千万不要使用不重用cell来解决问题。

那么正确的姿势是什么呢?

方式一

数据双向绑定,即MVVM。如果你的项目使用的MVVM,这种问题你肯定不会遇到。

当然,如果你的项目不是基于MVVM的那也没有关系,因为ReactiveCocoa、
KVO、Notification、block、delegate和target-action都可以用来做数据通信,这里我们选用最简单的block,因为block适合各种架构模式的项目,使用起来也比较简洁。

对于非MVVM的项目,使用中也不用可以创建去创建一个VM,只需要在cell中定义一个block,在输入框内容变化时,将输入内容返回,在block回调的地方,更新数据模型即可,判断时也很方便,循环数据模型即可(可以是array、map怎么方便怎么来)

方式二

自定义一个view,样式就跟之前的cell一样,在创建的时候根据枚举判断使用UITextField还是UITextView

typedef NS_ENUM(NSInteger, InputCellType){
    InputCellType_TextField  = 1,
    InputCellType_TextView   = 2
};

- (instancetype)initWithFrame:(CGRect)frame inputType:(InputCellType)inputType

之后循环添加到UIScrollView:

- (void)addContentView{
    [self.inputCellArray removeAllObjects];
    InputCellView *lastCellView;
    for (int i = 0; i < 6; i++) {
        InputCellView *cellView;
        if(i == 0){
            cellView = [[InputCellView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.width, InputCellHeight_TextField) inputType:InputCellType_TextField];
        }else if(i == 5){
            cellView = [[InputCellView alloc] initWithFrame:CGRectMake(0, lastCellView.bottom, self.scrollView.width, InputCellHeight_TextView) inputType:InputCellType_TextView];
        }
        else{
            cellView = [[InputCellView alloc] initWithFrame:CGRectMake(0, lastCellView.bottom, self.scrollView.width, InputCellHeight_TextField) inputType:InputCellType_TextField];
        }
        
        lastCellView = cellView;
        [self.scrollView addSubview:cellView];
        [self.inputCellArray addObject:cellView];
    }
        
    self.scrollView.contentSize = CGSizeMake(self.view.width, lastCellView.bottom);
}

获取数据就更方便了:

- (NSString *)getInputCellContentWithIndex:(NSInteger)index{
    InputCellView *cellView = self.inputCellArray[index];
    if(cellView.inputType == InputCellType_TextField){
        return cellView.textField.text;
    }else{
        return cellView.textView.text;
    };
}

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/56844.html

相关文章

拼多多免单手机,你真的了解吗?

拼多多免单手机,你真的了解吗?

随着科技的发展,手机已经成为我们生活中不可或缺的一部分。而在众多购物平台中,拼多多因为其独特的运营模式和低价策略,吸引了大量的消费者。尤其是拼多多的免单手机活动,更是引发了一阵购买热潮。但是,对于拼多多免单手机,你真的了解吗? 我们要明白,免单手机并非完全免费。实际上,拼多多的免单手...

没有存款的中老年人,别想着去工地,可以学会新的赚钱方式

没有存款的中老年人,别想着去工地,可以学会新的赚钱方式

01每个人都希望安度晚年。可是,在社会底层的人,怎么才能过好余生呢?没有一技之长,也没有存款,甚至连退休的准备也没有,这样的中老年人并不少见。多年前,“农民工”一直是一个热门词语。农村难以为生,就去城里打工。工作不好找,就去工地。凭借力量,可以换取工资,养活一家人。随着时代...

网站导航菜单策划制作四大要素。

网站导航菜单策划制作四大要素。

导航菜单是网页设计中最重要的部分了。每个用户浏览网站时一定有所需,因此导航菜单能够帮助用户寻找信息。好的导航菜单像是导游,告诉用户网站是干什么的,内容分类有哪些,在哪里可以找到什么信息。而且导航栏也是整体布局的重要组成,接下来点瑞科技小编给大家讲解企业网站导航栏的重要性。 导航菜单的作用:...

合理做好网络营销定位,走稳营销每一步。

合理做好网络营销定位,走稳营销每一步。

在企业发展中的地位越来越重要,很多企业用户虽然已经意识到了这一点,却苦于没有好的方法解决,因而总是差了临门一脚,迟迟迈不进网络营销的大门。对此,业内人士表示,企业要想获得一个较好的发展状态,就必须要迅速找到自己的网络营销定位,唯有如此才能在未来的发展中不走弯路。网络营销的定位从大方向上可以分为以下...

教你安兔兔首发网速报告:华为Mate。

教你安兔兔首发网速报告:华为Mate。

本文来自太平洋电脑网 根据目前5G作为市场主流的发展概况,大家都好奇,5G网络的网速究竟是不是如同宣传所说的对比4G网络而言提高了这么多速度,近日,我们常用来检测手机跑分的安兔兔软件在V8新版本中就新增了网络测速功能,能够同时对手机现有移动、Wi-Fi网络环境进行下载、上传速度测试,同时给出延迟和...

百度蜘蛛抓取网站总是连接超时怎么办。

百度蜘蛛抓取网站总是连接超时怎么办。

我每天都会看到一些来自百度站长平台的SEO数据,以便分析网站的状态是好是坏。我发现我的网站“抓取异常”部分总是有“抓取超时”、“连接超时”、502和503服务器错误;我也制定了SEO标准规范,但排名一直停留在第5、6和7页,这意味着我无法再排名了。这对搜索引擎优化有很大影响吗?是这个问题导致排名没有...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片