iOS 關(guān)于多tableView的segmentView

開發(fā)過程中梢夯,經(jīng)常碰到有需求說要當(dāng)頁面下,有多個(gè)可點(diǎn)擊晴圾,可滑動(dòng)切換的視圖颂砸。如網(wǎng)易新聞的首頁,部分app的個(gè)人信息頁等死姚。實(shí)現(xiàn)的思路可以是UIPageViewController多頁面混合開發(fā)人乓,或者addChildViewController的方式。

本篇講的是另外一種方式都毒,在自定義的scrollView上根據(jù)frame添加view色罚,通過改變contentOffset達(dá)到更換視圖的效果。一般情況下账劲,可滑動(dòng)的視圖不會(huì)超過四個(gè)戳护,為防止該功能每次需要的時(shí)候都要重寫,就做了一個(gè)封裝的SegmentContentView瀑焦,可支持動(dòng)態(tài)初始化腌且,支持2~4個(gè)tableView的切換。

防止.h文件暴露出來的方法太多榛瓮,所以只釋放了需要一些屬性和方法铺董,初始化的時(shí)候,傳入想要的tableView的數(shù)目創(chuàng)建view禀晓,selectFlagWithIndex該方法是在外部點(diǎn)擊切換按鈕精续,主動(dòng)更改contentOffset坝锰,默認(rèn)是沒有加切換動(dòng)畫的。

@property (nonatomic, strong) UITableView * firstTableView;
@property (nonatomic, strong) UITableView * secondTableView;
@property (nonatomic, strong) UITableView * thirdTableView;
@property (nonatomic, strong) UITableView * fourthTableView;

@property (nonatomic, weak) id <SegmentContentViewDelegate> segmentDelegate;

/**
 * 根據(jù)傳入的數(shù)目驻右,初始化視圖
 */
- (instancetype)initWithFrame:(CGRect)frame tableViewCounts:(NSInteger)counts;
/**
 * 根據(jù)頭部點(diǎn)擊按鈕滑動(dòng)到該tableView
 */
- (void)selectFlagWithIndex:(NSInteger)index;

以下是SegmentContentView必須實(shí)現(xiàn)的代理方法什黑,是把view內(nèi)部的tableView的dataSource代理放了出來崎淳,根據(jù)需求不同靈活更改

/**
 * 外放cell數(shù)目
 */
- (NSInteger)creatCellWithTableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
/**
 * 外放自定義的cell
 */
- (UITableViewCell *)creatCellWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath;

以下是自定義的一些代理堪夭,因?yàn)楸敬伍_發(fā)中有一個(gè)根據(jù)滑動(dòng)位移,需要把頭像縮小到導(dǎo)航欄的需求拣凹,如果再碰到這種情況森爽,可以根據(jù)tableView滑動(dòng)的距離自行添加動(dòng)畫

/**
 * 外放cell高度
 */
- (CGFloat)creatCellHeightWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath;

/**
 * 外放頭視圖
 */
- (UIView *)creatHeaderViewWithTableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

/**
 * 外放頭視圖高度
 */
- (CGFloat)creatHeaderViewHeightWithTableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

/**
 * 滑動(dòng)到另外一個(gè)tableView可以產(chǎn)生的回調(diào)
 */
- (void)scrollToOtherTableView:(UITableView *)tableView index:(NSInteger)index;

/**
 * 針對(duì)tableView滑動(dòng)外放的方法
 */
- (void)scrollWithTableView:(UITableView *)tableView;

以下是出來的效果


滑動(dòng)動(dòng)畫.gif

關(guān)于滑動(dòng)位移改變,計(jì)算出具體位移改變量嚣镜,滑動(dòng)過程中爬迟,改變相應(yīng)同比例數(shù)值,需要注意的點(diǎn)是scrollView的scrollViewDidScroll滑動(dòng)代理菊匿,并不是逐幀執(zhí)行的付呕,在滑動(dòng)過快的時(shí)候只通過代理回調(diào),會(huì)出現(xiàn)掉幀的情況跌捆,尤其是在開始和結(jié)束的時(shí)候徽职,一旦超出滑動(dòng)范圍,需要補(bǔ)調(diào)一次代理佩厚,設(shè)置需要的frame范圍姆钉,用戶體驗(yàn)會(huì)好很多。

這次需求要求的是頭部縮放的滑動(dòng)范圍內(nèi)抄瓦,多個(gè)tableView也應(yīng)當(dāng)同步滑動(dòng)潮瓶,否則用戶在切換不同的tableView時(shí),因?yàn)轭^視圖高度不一樣而不美觀钙姊,所以實(shí)際上看上去像是頭視圖的view毯辅,是添加在VC上的,與SegmentContentView同級(jí)煞额,覆蓋在tableView的透明頭視圖上思恐,所以減少了創(chuàng)建四個(gè)頭視圖,避免了需要同步修改多個(gè)頭視圖狀態(tài)的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末立镶,一起剝皮案震驚了整個(gè)濱河市壁袄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媚媒,老刑警劉巖嗜逻,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缭召,居然都是意外死亡栈顷,警方通過查閱死者的電腦和手機(jī)逆日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萄凤,“玉大人室抽,你說我怎么就攤上這事∶遗” “怎么了坪圾?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惑朦。 經(jīng)常有香客問我兽泄,道長(zhǎng),這世上最難降的妖魔是什么漾月? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任病梢,我火速辦了婚禮,結(jié)果婚禮上梁肿,老公的妹妹穿的比我還像新娘蜓陌。我一直安慰自己,他們只是感情好吩蔑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布钮热。 她就那樣靜靜地躺著,像睡著了一般哥纫。 火紅的嫁衣襯著肌膚如雪霉旗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天蛀骇,我揣著相機(jī)與錄音厌秒,去河邊找鬼。 笑死擅憔,一個(gè)胖子當(dāng)著我的面吹牛鸵闪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暑诸,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蚌讼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了个榕?” 一聲冷哼從身側(cè)響起篡石,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎西采,沒想到半個(gè)月后凰萨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胖眷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了武通。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珊搀,死狀恐怖冶忱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情境析,我是刑警寧澤囚枪,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站簿晓,受9級(jí)特大地震影響眶拉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憔儿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望放可。 院中可真熱鬧谒臼,春花似錦、人聲如沸耀里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冯挎。三九已至底哥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間房官,已是汗流浹背趾徽。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翰守,地道東北人孵奶。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜡峰,于是被迫代替她去往敵國和親了袁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,339評(píng)論 8 265
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,640評(píng)論 1 9
  • 戀人與朋友 ——知青紀(jì)事之二十六 兩個(gè)人一高一矮湿颅,下去的時(shí)候载绿,都安排在同一個(gè)生產(chǎn)隊(duì)。高者歲數(shù)大些油航,儼然老成的成人樣...
    羊圈頭閱讀 159評(píng)論 0 0
  • 昨天參加聚會(huì)崭庸,收到來自聚會(huì)召集人Olive精心準(zhǔn)備的讓人淚目的禮物。 一個(gè)書簽,書簽上刻著我的名字冀自,還配有一張小紙...
    掬水聞香閱讀 316評(píng)論 0 0
  • 80歲的劉道義老人來參加我們公司的年會(huì)揉稚。在公司內(nèi)部領(lǐng)導(dǎo)做報(bào)告的環(huán)節(jié)中,穿插著一個(gè)她的講話熬粗。但是很顯然搀玖,她“拖堂”太...
    Tree_L閱讀 1,038評(píng)論 0 1