自定義UI控件

基于UI控件的實(shí)現(xiàn)原理蹄皱,開(kāi)發(fā)者完全可以開(kāi)發(fā)出項(xiàng)目定制的控件——當(dāng)iOS系統(tǒng)提供的UI控件不足以滿(mǎn)足項(xiàng)目需要時(shí)览闰,開(kāi)發(fā)者可以通過(guò)繼承UIView來(lái)派生自定義控件芯肤。

#當(dāng)開(kāi)發(fā)者打算派生自己的UI控件時(shí),首先定義一個(gè)繼承View基類(lèi)的子類(lèi)压鉴,然后重寫(xiě)View類(lèi)的一個(gè)或多個(gè)方法崖咨,通常可以被用戶(hù)重寫(xiě)的方法如下

? initWithFrame::前面已經(jīng)見(jiàn)到油吭,程序創(chuàng)建UI控件時(shí)常常會(huì)調(diào)用該方法執(zhí)行初始化击蹲,因此,如果你需要對(duì)UI控件執(zhí)行一些額外的初始化婉宰,即可通過(guò)重寫(xiě)該方法來(lái)實(shí)現(xiàn)歌豺。

? initWithCoder::程序通過(guò)在nib文件中加載完該控件后會(huì)自動(dòng)調(diào)用該方法。因此心包,如果程序需要在nib文件中加載該控件后執(zhí)行自定義初始化类咧,則可通過(guò)重寫(xiě)該方法來(lái)實(shí)現(xiàn)。

? drawRect::如果程序需要自行繪制該控件的內(nèi)容蟹腾,則可通過(guò)重寫(xiě)該方法來(lái)實(shí)現(xiàn)痕惋。

? layoutSubviews:如果程序需要對(duì)該控件所包含的子控件布局進(jìn)行更精確的控制,可通過(guò)重寫(xiě)該方法來(lái)實(shí)現(xiàn)娃殖。

? didAddSubview::當(dāng)該控件添加子控件完成時(shí)值戳,將會(huì)激發(fā)該方法。

? willRemoveSubview::當(dāng)該控件將要?jiǎng)h除子控件時(shí)珊随,將會(huì)激發(fā)該方法述寡。

? willMoveToSuperview::當(dāng)該控件將要添加到其父控件中時(shí),將會(huì)激發(fā)該方法叶洞。

? didMoveToSuperview:當(dāng)把該控件添加到父控件完成時(shí)鲫凶,將會(huì)激發(fā)該方法。

? willMoveToWindow: :當(dāng)該控件將要添加到窗口中時(shí)衩辟,將會(huì)激發(fā)該方法螟炫。

? didMoveToWindow:當(dāng)把該控件添加到窗口完成時(shí),將會(huì)激發(fā)該方法艺晴。

? touchesBegan:withEvent::當(dāng)用戶(hù)手指開(kāi)始觸碰該控件時(shí)昼钻,將會(huì)激發(fā)該方法。

? touchesMoved:withEvent::當(dāng)用戶(hù)手指在該控件上移動(dòng)時(shí)封寞,將會(huì)激發(fā)該方法然评。

? touchesEnded:withEvent::當(dāng)用戶(hù)手指結(jié)束觸碰該控件時(shí),將會(huì)激發(fā)該方法狈究。

? touchesCancelled:withEvent::用戶(hù)取消觸碰該控件時(shí)碗淌,將會(huì)激發(fā)該方法。

#靈活運(yùn)用代理/block進(jìn)行值處理,等等亿眠。碎罚。。

#自定義Navigation

1.更改導(dǎo)航欄的背景和文字Color
#方法1:
//set NavigationBar 背景顏色&title 顏色 

[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.0 green:155/255.0 blue:213/255.0 alpha:1.0]];

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],UITextAttributeTextColor,nil]];

#方法2:
//設(shè)置NavigationBar背景顏色
 [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]]; 

//@{}代表Dictionary 
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; 

在導(dǎo)航欄使用背景圖片:
如果您的應(yīng)用程序使用了自定義圖像作為欄的背景纳像,你需要提供一個(gè)“更大”的圖片荆烈,使其延伸了狀態(tài)欄的后面。
導(dǎo)航欄的高度現(xiàn)在是從44點(diǎn)(88像素)更改為64點(diǎn)(128像素)竟趾。仍然可以使用了setBackgroundImage:方法來(lái)指定自定義圖像的導(dǎo)航欄憔购。
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bg.png"] forBarMetrics:UIBarMetricsDefault];

#改變導(dǎo)航欄標(biāo)題的字體
#可以通過(guò)使用導(dǎo)航欄的“titleTextAttributes”屬性來(lái)自定義的文本樣式。
#可以指定字體潭兽,文字顏色倦始,文字陰影顏色,文字陰影在文本標(biāo)題偏移屬性字典山卦,使用下面的文本屬性鍵:
#UITextAttributeFont - 字體
#UITextAttributeTextColor - 文字顏色
#UITextAttributeTextShadowColor - 文字陰影顏色
#UITextAttributeTextShadowOffset - 偏移用于文本陰影

NSShadow *shadow = [[NSShadow alloc] init]; 
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8]; 
shadow.shadowOffset = CGSizeMake(0, 1);
// 字典有點(diǎn)長(zhǎng)鞋邑,將就看一下哈
 [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName, shadow, NSShadowAttributeName, [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:21.0], NSFontAttributeName, nil nil]]; 

#使用圖片作為導(dǎo)航欄標(biāo)題
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"appcoda-logo.png"]]; 

#添加多個(gè)欄按鈕項(xiàng)目
UIBarButtonItem *shareItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action: nil nil]; 
UIBarButtonItem *cameraItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action: nil nil]; 
NSArray *itemsArr = @[shareItem,cameraItem]; self.navigationItem.rightBarButtonItems = itemsArr;


#自定義后退按鈕的文字和顏色
方法一:
通過(guò)設(shè)置navigationItem的backBarButtonItem可以直接更換文字,【注意账蓉,要在父視圖的Controller中設(shè)置】如代碼:
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = item; 
效果:所有的子界面返回時(shí)都變成了我們定義的文字枚碗,如果不想顯示文字,直接""铸本,就會(huì)單獨(dú)顯示一個(gè)系統(tǒng)的返回箭頭圖標(biāo)肮雨,也是很清晰的感覺(jué)。

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 
效果:全是系統(tǒng)的圖標(biāo)和文字箱玷,【除了后退按鈕怨规,請(qǐng)注意,tintColor屬性影響所有按鈕標(biāo)題和按鈕圖像】


#另外一種實(shí)現(xiàn)自定義導(dǎo)航控制器返回按鈕锡足,代碼如下:
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:19.0]}]; 
self.title=[NSString stringWithFormat:@"第%lu頁(yè)",(unsigned long)self.navigationController.viewControllers.count]; 

//自定義返回按鈕 
UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

##//將返回按鈕的文字position設(shè)置不在屏幕上顯示##
 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault]; 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末波丰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舶得,更是在濱河造成了極大的恐慌掰烟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沐批,死亡現(xiàn)場(chǎng)離奇詭異纫骑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)九孩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)先馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人躺彬,你說(shuō)我怎么就攤上這事磨隘$偷祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵番捂,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我江解,道長(zhǎng)设预,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任犁河,我火速辦了婚禮鳖枕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桨螺。我一直安慰自己宾符,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布灭翔。 她就那樣靜靜地躺著魏烫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肝箱。 梳的紋絲不亂的頭發(fā)上哄褒,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音煌张,去河邊找鬼呐赡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骏融,可吹牛的內(nèi)容都是我干的链嘀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼档玻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怀泊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起窃肠,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤包个,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后冤留,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碧囊,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年纤怒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糯而。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泊窘,死狀恐怖熄驼,靈堂內(nèi)的尸體忽然破棺而出像寒,到底是詐尸還是另有隱情,我是刑警寧澤瓜贾,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布诺祸,位于F島的核電站,受9級(jí)特大地震影響祭芦,放射性物質(zhì)發(fā)生泄漏筷笨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一龟劲、第九天 我趴在偏房一處隱蔽的房頂上張望胃夏。 院中可真熱鬧,春花似錦昌跌、人聲如沸仰禀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)答恶。三九已至,卻和暖如春审胸,著一層夾襖步出監(jiān)牢的瞬間亥宿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工砂沛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烫扼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓碍庵,卻偏偏與公主長(zhǎng)得像映企,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子静浴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • UIView控件只是一個(gè)矩形的空白區(qū)域堰氓,并沒(méi)有任何內(nèi)容。iOS應(yīng)用的其他UI控件都繼承了UIView苹享,這些UI控件...
    VickyLanLan閱讀 655評(píng)論 0 2
  • 之前實(shí)現(xiàn)了一個(gè)尺子双絮,效果如圖: 最開(kāi)始是用drawRect的方式實(shí)現(xiàn)的,就是在drawRect方法中得问,把每一條刻度...
    Phelthas閱讀 596評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,288評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,791評(píng)論 22 665
  • 或許 每個(gè)人都有各自的生活方式 交友方式 但我真的很無(wú)法理解這種若即若離的關(guān)系 也無(wú)法理解現(xiàn)在的關(guān)系是朋友還是只是...
    Jessie小靜閱讀 202評(píng)論 0 0