推广

iOS 如何循环遍历cell

iseeyu3年前 (2024-02-21)推广147

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

先在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

相关文章

我来教你网站关键词优化需具备哪些条件。

我来教你网站关键词优化需具备哪些条件。

二十一世纪互联网的迅速发展,相对于企业来讲,都开始重视网站建设优化,而在网站建设好以后,也都希望能够在搜素引擎能够尽量排名到首页。故而大家都会费尽心思去做网站的优化工作,但是在做的过程中,往往却发现自己无论做和努力,关键词的排名却丝毫没有改善。小编介绍出现此问题,主要是由于网站不具备以下,而企业在此...

抖音同城霸屏推广用什么软件操作比较好?

抖音同城霸屏推广用什么软件操作比较好?

抖音霸屏是抖音推出的一一款产品,可以快速商家,提高商家门店的曝光,精准客户到店商家只需要提前把宣传视频上传到工具里面,通过工具可以生成二维码,客户只要好用抖音扫描了二维码,就会自动发布视频,并且会把门店位置标记出来并且由于视频标记了门店地址,所以抖音推荐播放的都是同城的人,...

低保户开淘宝店有影响吗(低保户能开网店吗)

低保户开淘宝店有影响吗(低保户能开网店吗)

在淘宝网开店和家里是否有低保证件无任何冲突,也不会对低保有任何影响,只有国家机关工作的人员才不允许从商包括在淘宝网开店,低保是无任何影响的。...

美容院项目无人问津,试试这5种营销方法

美容院项目无人问津,试试这5种营销方法

会馆最有效的拓客方式,半夏门店管家来教你!目前,对于美容院来讲,通过产品加盟来实现美容院经营创新的方法越来越来给美容院的经营带来巨大的压力。一方面没有新项目,美容院就没有了销售的目标,老顾客应该购买的已经都购买了,只有通过新项目的引进才能实现销售业绩的增加。另一方面新项目的...

网站优化要做成什么样?怎样才算好的优化。

网站优化要做成什么样?怎样才算好的优化。

我们都知道中小企业进行网络营销,是一个最为有用的手法,我们也都想做好SEO,那么就非常要害。已然要决定做网站优化,那就做完好的,全套的!   网站的页面优化,即网页优化是对网页的程序、内容、版块、布局等多方面的优化调整,使其合适查找引擎检索,满足查找引擎排名的方针,然后在查找引擎检索中取得的排名进...

淘宝上卖包包怎么样,女包的利润怎么定价(怎样卖包包)

淘宝上卖包包怎么样,女包的利润怎么定价(怎样卖包包)

单说淘宝包包这个类目,是比较难做的,因为这个类目很大,竞争十分激烈。不过,包包是人们长期稳定需求的东西,只要我们选对了消费人群,卖包包还是可行的。...

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

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