1. 程式人生 > >如何修改UIPickerView選中行背景顏色

如何修改UIPickerView選中行背景顏色

最近有需求要求選擇器,選中行背景顏色為藍色,同時選中行字型顏色為白色。
如下圖:

這裡寫圖片描述

當時用的是系統原生UIPickerView實現的。但是UIPickerView並沒有提供可以設定選中行背景顏色的介面。

後來通過檢視UIPickerView的層級結構,發現 UIPickerView 內部有一個middleContainerView屬性,這層view剛好覆蓋的是選中行。如下圖

這裡寫圖片描述

可以看到,內部分層大致如下:選中行是一個view,選中行上部和下部也是單獨的view。實現思路就考慮拿到中間行view,設定背景顏色。
在UIPickerView初始化後,設定一下此view背景顏色即可。那麼問題就是如何拿到這層view。見下圖:
這裡寫圖片描述

middleContainerView就是我們要設定背景顏色的view。
實現程式碼:

    NSArray *subviews = self.pickView.subviews;
    if (!(subviews.count > 0)) {
        return;
    }
    NSArray *coloms = subviews.firstObject;
    if (coloms) {
        NSArray *subviewCache = [coloms valueForKey:@"subviewCache"];
        if (subviewCache.count
> 0) { UIView *middleContainerView = [subviewCache.firstObject valueForKey:@"middleContainerView"]; if (middleContainerView) { middleContainerView.backgroundColor = [MTColorUtil hexStringToColor:@"#3AABCB"]; } } }

程式碼中是從subviewCache中取的,也可以從圖片中的tables中獲取是一樣的。

1)Demo中中已經封裝成ZGPickerView類,繼承自UIPickerView。
2)資料來源支援一維陣列和二維陣列。
3)選中資料索引通過delegate,回撥給使用者

相關推薦

如何修改UIPickerView中行背景顏色

最近有需求要求選擇器,選中行背景顏色為藍色,同時選中行字型顏色為白色。 如下圖: 當時用的是系統原生UIPickerView實現的。但是UIPickerView並沒有提供可以設定選中行背景顏色的介面。 後來通過檢視UIPickerView的層級結構,發

WinForm中ListView設定中行背景顏色,字型格式

 private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)        

eazyUI 修改datagrid中行默認背景色

cte clas 背景 div pre color 默認 sel datagrid <style> .datagrid-row-selected { background: #D1EEEE; co

Echarts 自定義legend圖片,修改之後的顏色圖解

第一個問題:echarts 可以自定義圖例的圖示,百度上很多回答都是引用的相對路徑,但是不知道為啥,我的vue專案就是引用不顯示,在network裡面找不到相應圖片 後來我想了個法子,就是先獲取到這個圖片,然後複製它的dataURL 也就是在網頁上解析之後的圖片路徑,就能正常顯示了——————至於原因,em

style物件的使用,當點背景顏色變為黃色

<!DOCTYPE html> <html lang="zh"> <head>     <meta charset="UTF-8" />     <meta name="viewport

Android 5.1修改SystemUi導航欄背景顏色

現在很多手機都是用虛擬按鍵了,但是很多手機的虛擬按鍵的導航欄背景顏色是黑色的,看起來其醜無比啊,比如華為; 要想看上去協調一些,當然是改成透明的啦,怎麼改呢?按照以往的思路,當然是直接改佈局檔案就可以了的,想想這個思路也沒錯,佈局檔案位於 frameworks/base/packages/S

android:修改PagerTabStrip中的背景顏色,標題字型的樣式、顏色和圖示以及指示條的顏色

1.修改PagerTabStrip中的背景顏色 我們在佈局中直接設定background屬性即可: <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" andro

修改CButton類按鈕背景顏色和文字顏色

要想修改CButton類按鈕背景顏色和文字顏色,必須利用自繪方法對按鈕進行重新繪製。這可以通過定義一個以CButton為基類的新按鈕類來實現。以下為具體的實現方法: 方法一: 加入一個新類,類名:CMyButton,基類:CButton。 在標頭檔案 MyButto

MFC對話方塊如何使用工具欄並修改工具欄的背景顏色與自繪對話方塊統一

    原始碼下載:http://download.csdn.net/detail/panshiqu/6031859     最終效果圖     不嫌丟人的說:這個問題困擾我多天,主要是也沒有努力的去解決它,把希望都寄託在網友身上,遺憾的是直到我找到解決辦法,我仍沒有從眾

MFC對話方塊如何使用工具欄並修改工具欄的背景顏色與自繪對話方塊統一(二)

    寫這篇文章只是為了解決我上一篇文章遺留的一個問題,本來覺得這個問題可以不用管,但是在我寫的程式中發現並不能置之不理,先來重現這個問題     工具欄有一部分沒有繪上     看紅色框包圍的地方,是背後 VS2010 的介面,因為程式擦成透明的啦,上一篇文章我錯誤

Android修改狀態列的背景顏色

一,概述 我相信很多初入Android開發的開發者都為自己開發的app的狀態列煩惱過,狀態列和自己的介面風格格格不入,但是不知道如何修改這個狀態列的顏色,感覺無從下手.我最近就是被這個狀態的預設風格搞得焦頭爛額,終於找到了相應的解決辦法.雖然程式碼不是我寫的,我也只能看懂一

原生js 實現table 被中行顏色

最近在做一個專案,因為框架原因,所有功能只能使用原生js開發(真的無語),碰到"實現table 被選中行變顏色"的需求,就在網上找了下,然後寫了一個js方法,只需要changeColorWithTrs(tableid)就可以實現(ps:也是為了自己方便引用,只要把table的

listview改變中行字型顏色

目標:選中item,其字型設定為#3197FF,未選中的,其字型為#FFFFFF。其效果圖如下: 與listvew設定選中行item背景圖片一樣,使用selector,不過這裡的顏色設定,應該是在listview中的textview中設定。 1 2 3 4 5 6

小程式修改單頁面的背景顏色

設定小程式的頁面背景顏色,一開始設定了一個全域性的背景顏色,在app.json的widows物件中進行設定 "window": { "backgroundTextStyle": "light", "navigationBarBackgr

修改搜尋框的背景顏色,最有效的方法

//去掉搜尋框背景 self.searrchBar.backgroundImage = [selfimageWithColor:[UIColorclearColor] size:self.searrchBar.bounds.size]; //取消searchbar背

微信小程式點移除新增class(點改變背景顏色和字型顏色

微信小程式不允許DOM操作,所以不能用addClass這種方法,我的用法如下。 點選元素後,獲取元素中data-select值,賦值給catalogSelect,然後判斷二者是否相等,一樣則新增class(class的css可以先寫好)。

UITableViewCell點背景顏色

1.點選UITableViewCell時,沒有點選效果,在cellForRowAtIndexPath:方法中寫上 cell.selectionStyle = UITableViewCellSelectionStyleNone; 2.點選UITableCell時,Ce

antd table 行點事件以及高亮顯示中行背景顏色

需求如圖點選表格某一行選中,修改選中行的背景顏色 檢視antd的官方文件 https://ant.design/components/table-cn/ 會發現文件中給出了兩個屬性 rowClassName 和 onRow rowClassName: 表格行的類名,

按鈕修改背景顏色及節點操作隔行變色案例

<input type="button" value="點選設定" id="dtn"/><div id="dd"> <span>這是一個span</span> <p>這是一個p</p> <span>這是一個s

修改元素背景顏色

<style> .selected{ color: #FFFFFF; background: url(selected.png) no-repeat; background-size: 100% 100%; } </