推广

iOS 如何循环遍历cell

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

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

先在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://www.0291.com.cn/post/56844.html

相关文章

高端洗护产品如何推广市场(洗护类目运营思路)

高端洗护产品如何推广市场(洗护类目运营思路)

高端洗护产品的推广,不仅仅是一个品牌知名度及销售量的提升的问题,更重要的是,能否在市场上快速地占领消费者并留住消费者。高端洗护产品作为日化行业最具消费实力与号召力人群所打造的产品,其对消费者有着极为苛刻的品质要求。而对于这一类人群来说,他们追求健康生活、追求品质生活。为了能够更好地满足消费者需求...

训练你的商业思维

训练你的商业思维

01如果谈到商业,估计很多人会是一脸呆萌相,觉得我一个打工族,要什么商业思维?我不不做生意的,要商业思维干嘛?这真是一个精致的实用主义者,我没法轻易扭转你的思维。因为改变认知不是一朝一夕可言的。我记得流传很广的一句话,“每个人都是销售,不是销售产品,就是销售自己,为的都是卖...

知乎软文营销

知乎软文营销

软文就是带有某种动机的文体;而则是个人和群体通过撰写软文,实现动机,达成交换或交易的目的的营销方式,可以相对于硬广告而言。众所周知,硬广告是一种纯粹的广告,直接的广而告知。而在软文中,如销售信函,广告文案,宣传等,他们都是带有“硬广告”性质的软文。兼容了“硬广告”的强硬,但...

网站排名优化要注意什么。

网站排名优化要注意什么。

SEO优化中心 二、关键词 SEO优化中心 很多人都知道,关键词是网站SEO优化的核心,也是其最好的代言形象。因此SEO优化在挖掘筛选关键词时,应该做到以下三点:站在客户的角度选择关键词,尽量选择有关联性的,竞争性小的关键词,避免使用热门关键词;单个网页页面关键词密度应该控制在2%-8%之...

SEO的品牌建设之路。

SEO的品牌建设之路。

  随着百度不断更新算法,360不断抢占搜索市场,如今的搜索格局都已固定在内容(如何让网站内容拔得头筹?差异化!)为主导的时代里,曾经的外链为皇现在作用已被削弱。每次百度大更新后都有无数站点被降权或者K掉,但总有一批站点,依然安然无恙。几乎是同样的人力物力在进行的,为什么会出现这样的状况?仔细分析...

【揭秘】拼多多免费注册店铺,开启你的创业梦

【揭秘】拼多多免费注册店铺,开启你的创业梦

近年来,随着互联网的飞速发展,电商平台如雨后春笋般涌现。其中,拼多多以其独特的社交电商模式和免费注册店铺的优势,吸引了大量的商家和创业者。那么,拼多多免费注册店铺究竟有何魅力?如何通过它来实现自己的创业梦想呢?就让我为大家一一揭秘。 我们要明确,拼多多免费注册店铺的优势。对于很多想要...

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

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