[iOS]實現(xiàn)多方向拖拽EXCEL表格中遇到的問題

之前在寫一個類似于Excel表格頁面時乏梁,一種方式是可以實現(xiàn)可以上下左右及斜角聯(lián)動谁不,另一種方式只可以上下左右聯(lián)動剑梳。之所以提及這兩種方式主要是在開發(fā)過程中第一種遇到了內(nèi)存占用大問題搞隐,所以最終用了第二種方式實現(xiàn)Excel表格頁面匙睹。 Demo傳送門国夜,若有實現(xiàn)同樣需求的可以作為參考呢诬。

效果圖.jpeg

思路:

第一種方式:左邊用一個搭一個tableView顯示每行標題庶近,頂部物料編碼用一個UIView顯示赞庶,頂部用一個collectionView填列標題训挡,中間用一個srollerView再將tableview放其上填滿

#pragma mark - 右側(cè)詳情頁面

- (void)loadDetailView {
    _detailScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(kAverageTableViewWidth, topConllectionCellH, kAverageTableViewWidth*2, kScreenHeight)];
    _detailScrollView.tag           =   DetailScrollViewTag;
    _detailScrollView.bounces       =   false;
    _detailScrollView.delegate      =   self;
    _detailScrollView.showsVerticalScrollIndicator      =  false;
    _detailScrollView.showsHorizontalScrollIndicator    =  false;
    _detailScrollView.contentSize   =   CGSizeMake(7*kAverageTableViewWidth, self.systransInquirystockArrays.count*rowHight);
    _detailScrollView.backgroundColor = [UIColor grayColor];
    
    
    _detailTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, kAverageTableViewWidth*7, self.systransInquirystockArrays.count*rowHight) style:UITableViewStylePlain];
    _detailTableView.dataSource = self;
    _detailTableView.delegate = self;
    _detailTableView.tag = MidTableViewTag;
    _detailTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    [self.view addSubview:_detailScrollView];
    
    [_detailScrollView addSubview:_detailTableView];
}

上面代碼主要是中間詳情的內(nèi)容視圖,因為我這里的有七列歧强,所以將scrollerView 的滾動范圍設(shè)成

_detailScrollView.contentSize   =   CGSizeMake(7*kAverageTableViewWidth, self.systransInquirystockArrays.count*rowHight);

寬為七列寬澜薄,高度為請求回來的數(shù)組有多少數(shù)組將其成以設(shè)定tableViewCell的高度有多少。同時將tableView Frame設(shè)置成等同于scrollerView的尺寸,四個控件在代理方法拖拽的處理如下:

/**
 
 判斷拖動的view的tag進行聯(lián)動
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (_currentScrollViewTag == TitleTableViewTag) {
        CGFloat offSetX = _beforeScrollViewTag == TopIconListViewTag ? _topIconListView.contentOffset.x : _detailScrollView.contentOffset.x;
        _detailScrollView.contentOffset = CGPointMake(offSetX, _titleTableView.contentOffset.y);
        _topIconListView.contentOffset = CGPointMake(offSetX, 0);
        return;
    }
    if (_currentScrollViewTag == DetailScrollViewTag) {
        _titleTableView.contentOffset = CGPointMake(0, _detailScrollView.contentOffset.y);
        _topIconListView.contentOffset = CGPointMake(_detailScrollView.contentOffset.x, 0);
        return;
    }
    if (_currentScrollViewTag == TopIconListViewTag) {
        CGFloat offSetY = _beforeScrollViewTag == TitleTableViewTag ? _titleTableView.contentOffset.y : _detailScrollView.contentOffset.y;
        _detailScrollView.contentOffset = CGPointMake(_topIconListView.contentOffset.x, offSetY);
        _titleTableView.contentOffset = CGPointMake(0, _detailScrollView.contentOffset.y);
        return;
    }
}

可以看到中間詳情tableView在代理方法中沒做任何處理摊册,詳情tableView是跟隨著scrollerView動的肤京。
這樣就實現(xiàn)了拖拽上下左右及斜角方向時四個控件的聯(lián)動聯(lián)動。但這樣有不足之處茅特,當請求下來的數(shù)據(jù)不大時還好忘分,但行數(shù)一旦達到上千行時,明顯內(nèi)存會占用很大

第一種方式.png
第二種方式.png

可以對比兩圖第一種方式當我 加載大量數(shù)據(jù)時白修,相對于第二種方式出現(xiàn)了嚴重的內(nèi)存占用問題妒峦。起初沒發(fā)覺是因為我加載的數(shù)據(jù)不多,當有人出現(xiàn)全查時就會有這種情況出現(xiàn)熬荆,我檢查了內(nèi)存是否存在泄漏及cell的復用的情況都沒問題舟山,但仔細看代碼才發(fā)現(xiàn)我這種方案是有問題的,因為我把中間詳情tableView的Frame設(shè)置成等同于scrollerView的尺寸卤恳,當全查時即高度等于cell的高度乘以1000累盗,當加載tableView時把全部cell加載出來,每個cell有近10個對象創(chuàng)建突琳,將相當于上萬個對象在占用內(nèi)存若债,當滑動到最后一個時才會啟用cell的回收機制,還好都是一些label拆融,若是每個cell中有圖片后果可想而知蠢琳。

第二種方式:同樣是搭建如上所搭建的方式啊终,但srollerView的滑動范圍改成如下

_detailScrollView.contentSize   =   CGSizeMake(7*kAverageTableViewWidth, kScreenHeight);

中間詳情的tableview的Frame改成如下:

 _detailTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, kAverageTableViewWidth*7, kScreenHeight)

拖拽的策略改成如下:

/**
 
 判斷拖動的view的tag進行聯(lián)動
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (_currentScrollViewTag == TitleTableViewTag) {
        //上一次點的是頭部視圖,內(nèi)容試圖的偏移量等于頭部視圖的偏移量,不然內(nèi)容視圖的偏移量等于本身的偏移量
        CGFloat offSetTableViewX = _beforeScrollViewTag == TopIconListViewTag ? _topIconListView.contentOffset.x : _detailTableView.contentOffset.x;
        _detailTableView.contentOffset = CGPointMake(offSetTableViewX, _titleTableView.contentOffset.y);
        return;
    }
    if (_currentScrollViewTag == MidTableViewTag) {
        _titleTableView.contentOffset = CGPointMake(0, _detailTableView.contentOffset.y);
        return;
    }
    if (_currentScrollViewTag == DetailScrollViewTag) {
        _topIconListView.contentOffset = CGPointMake(_detailScrollView.contentOffset.x, 0);
        return;
    }
}

當前拖拽中間詳情tableview時傲须,若是上下方向蓝牲,識別的是中間詳情的tableview,偏移量賦給左邊行標題的tableview泰讽,若是左右方向時例衍,識別的是tableview下的scrollerView的偏移量賦給頭部的collectionView。當點擊左邊行標題的tableview如上代碼注釋已卸。
這樣的方案只創(chuàng)建看得見的cell佛玄,cell消失后就會啟動cell的復用機制,所以內(nèi)存不會怎么占用累澡。但這樣斜角拖拽方向沒有實現(xiàn)梦抢。但上面最終竟然認可第二種方案,原因是斜角拖拽會有一種錯亂感愧哟,雖然就這樣去解決不是很好奥吩,以后再嘗試在即保證內(nèi)存優(yōu)化的情況下實現(xiàn)第一種方式的excel表格吧。能力有限翅雏,有錯求指正圈驼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市望几,隨后出現(xiàn)的幾起案子绩脆,更是在濱河造成了極大的恐慌,老刑警劉巖橄抹,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靴迫,死亡現(xiàn)場離奇詭異,居然都是意外死亡楼誓,警方通過查閱死者的電腦和手機玉锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疟羹,“玉大人主守,你說我怎么就攤上這事¢冢” “怎么了参淫?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愧杯。 經(jīng)常有香客問我涎才,道長,這世上最難降的妖魔是什么力九? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任耍铜,我火速辦了婚禮邑闺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棕兼。我一直安慰自己陡舅,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布伴挚。 她就那樣靜靜地躺著蹭沛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪章鲤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天咆贬,我揣著相機與錄音败徊,去河邊找鬼。 笑死掏缎,一個胖子當著我的面吹牛皱蹦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眷蜈,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼沪哺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酌儒?” 一聲冷哼從身側(cè)響起辜妓,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忌怎,沒想到半個月后籍滴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡榴啸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年孽惰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸥印。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡勋功,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出库说,到底是詐尸還是另有隱情狂鞋,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布璃弄,位于F島的核電站要销,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夏块。R本人自食惡果不足惜疏咐,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一纤掸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浑塞,春花似錦借跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卵牍,卻和暖如春果港,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糊昙。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工辛掠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人释牺。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓萝衩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親没咙。 傳聞我的和親對象是個殘疾皇子猩谊,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容