自定義TabBar(下,繼承自UIView)

如果上篇介紹的自定義TabBar的方式不能滿足項(xiàng)目的需求,那么我們可以徹底的拋棄系統(tǒng)的UITabBar着茸,現(xiàn)在完全自定義一個(gè)繼承自UIView的TabBar壮锻。

這種方式也只要兩步即可。


一:

1涮阔,先自定義一個(gè)SinaTabBar繼承自系統(tǒng)的UIView

//自定義一個(gè)SinaTabBar

class SinaTabBar: UIView

2猜绣,重寫SinaTabBar的初始化方法,在初始化方法中添加若干個(gè)按鈕

首先敬特,必須是自定義的按鈕掰邢,因?yàn)閠abBar上面的按鈕沒有高亮點(diǎn)擊效果牺陶,所以要自定義按鈕去除高亮效果

class TabBarButton: UIButton {

override var isHighlighted: Bool {

set { } ?//set方法體為空,則該按鈕沒有點(diǎn)擊高亮效果

get {

return false

} } }

其次辣之,重寫init方法掰伸,添加按鈕

let btnCount = 5 //注意:假如指定添加5個(gè)按鈕

init(frame: CGRect) {

? for index in 0..<btnCount { ?//for循環(huán)添加指定數(shù)量的按鈕

? ? ? ? super.init(frame: frame)

? ? ? ? //初始化按鈕并添加到父控件中

? ? ? ?let btn = TabBarButton(type: .custom)

? ? ? ?addSubview(btn)

? ? ? ?/*

? ? ? ? ? ? ? ? ? 在這里可以給按鈕設(shè)置選中圖片和默認(rèn)圖片,文字等等

? ? ? ?*/

? ? ? //給按鈕添加事件響應(yīng)方法 ??

? ? ? btn.addTarget(self, action: #selector(btnClick(btn:)), for: .touchDown

? }

}

這是按鈕點(diǎn)擊響應(yīng)的方法

previousBtn是一個(gè)全局變量怀估,記錄的是上一個(gè)被選中的按鈕

func btnClick(btn:UIButton) {

//取消上一個(gè)按鈕的選中

previousBtn?.isSelected = false

//選中當(dāng)前按鈕

btn.isSelected = true

//當(dāng)前按鈕記錄

previousBtn = btn

}

3狮鸭,重寫layoutSubviews方法,在這個(gè)方法中給所有的子控件設(shè)置frame

override func layoutSubviews() {

let btnWidth = self.bounds.size.width / CGFloat(self.subviews.count)? //每個(gè)按鈕的寬度

let btnHeight = self.bounds.size.height //每個(gè)按鈕的高度多搀,等于View的高度

let btnY = 0 //每個(gè)按鈕的Y值歧蕉,

for index in 0..<self.subviews.count { ?//遍歷設(shè)置每個(gè)按鈕的frame

? ? ?? let btnX = btnWidth * CGFloat(index) ?//動態(tài)計(jì)算每個(gè)按鈕的X值 ? ?

? ? ? ?self.subviews[index].frame = CGRect(x: btnX, y: CGFloat(btnY),width: btnWidth, ?height: btnHeight)? //設(shè)置每個(gè)按鈕的frame值

}

}



二:

以下三小步是在tabBarController中執(zhí)行的,self 就是tabBarController康铭。

//1,實(shí)例化一個(gè)自定義的tabBar

let tabBarView = TabBarView()

//2,設(shè)置frame,就等于系統(tǒng)自帶的tabBar的frame

tabBarView.frame = self.tabBar.frame

//3,移除系統(tǒng)自帶的tabBar

self.tabBar.removeFromSuperview()

到這里一個(gè)完全自定義的tabBar就完成了惯退。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市麻削,隨后出現(xiàn)的幾起案子蒸痹,更是在濱河造成了極大的恐慌春弥,老刑警劉巖呛哟,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匿沛,居然都是意外死亡扫责,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門逃呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳖孤,“玉大人,你說我怎么就攤上這事抡笼∷沾В” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵推姻,是天一觀的道長平匈。 經(jīng)常有香客問我,道長藏古,這世上最難降的妖魔是什么增炭? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拧晕,結(jié)果婚禮上隙姿,老公的妹妹穿的比我還像新娘。我一直安慰自己厂捞,他們只是感情好输玷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布队丝。 她就那樣靜靜地躺著,像睡著了一般欲鹏。 火紅的嫁衣襯著肌膚如雪炭玫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天貌虾,我揣著相機(jī)與錄音吞加,去河邊找鬼。 笑死尽狠,一個(gè)胖子當(dāng)著我的面吹牛衔憨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袄膏,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼践图,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沉馆?” 一聲冷哼從身側(cè)響起码党,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斥黑,沒想到半個(gè)月后揖盘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锌奴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年兽狭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹿蜀。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箕慧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茴恰,到底是詐尸還是另有隱情颠焦,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布往枣,位于F島的核電站伐庭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婉商。R本人自食惡果不足惜似忧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丈秩。 院中可真熱鬧盯捌,春花似錦、人聲如沸蘑秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幼衰,卻和暖如春靴跛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渡嚣。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工梢睛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人识椰。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓绝葡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腹鹉。 傳聞我的和親對象是個(gè)殘疾皇子藏畅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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