2017-04-17 93 views
3

我試圖從一個擴展添加下面我UISegmentedControl一個子視圖,所以當我添加更多的屬性來此子視圖可以從應用程序內的其他UISegmentedControls被重用。分段控制子視圖從擴展

它出現在正確的地方,但由於某些原因有時會出現上述一些段,有時下面。我錯過了什麼嗎?

enter image description here

所以在我的擴展到目前爲止,這是我有:

import UIKit 

extension UISegmentedControl { 
    func addBackgroundView() { 
     let backgroundView = UIView(); 
     backgroundView.frame = self.bounds; 
     backgroundView.backgroundColor = UIColor.purple; 
     self.insertSubview(backgroundView, belowSubview: self); 
    } 
} 

然後,我稱之爲擴展功能從viewDidLoad方法中的視圖控制器:

self.segmentedControlUnit.addBackgroundView(); 
+0

嘗試此鏈接:http://www.richardhsu.me/posts/2015/01/26/segmented-control.html – KKRocks

+0

通過閱讀答案中的評論,最好的解決方案是(1)子類的UIView而不是UISegmentedControl,(2)添加UISegementedControl作爲一個子視圖,(3)揭露那些你需要每個類的東西 - 的UIView和UISegmentedControl - (4)加入希望這些自定義的東西呢?或多或少,你是否可以通過反轉*順序和*子類*而不是*擴展*來獲得所需的結果? – dfd

回答

0

嘗試索引0插入backgroundView,以確保它下面的所有子視圖的

self.insertSubview(backgroundView, at: 0) 
+0

嗨欒,感謝您的建議,但仍然發生相同的 –

+0

您的期望是什麼?也許我會有另一種方式來做到這一點。 –

+0

如果可以在某些區段在所附的圖像看到,這取決於被按下的紫色視圖上方出現,而不是下方,它不允許讀取該段文字。這是問題 –

1

我不認爲你可以做到這一點。這是UI層次時,我選擇第二部分, enter image description here ,這是UI層次時,我根據你選擇什麼段選擇第3段

所以分割位置的變化。 enter image description here

+0

這是我不明白的行爲。這是一個錯誤還是什麼?它不應該是上面的整個組件,而不僅僅是一些細分市場?我試圖從界面生成器添加一個視圖,它的工作原理。通過代碼不應該是一樣的嗎? –

+0

我認爲這是默認行爲。你必須通過包裝UISegmentedControl來創建你自己的定製控制器。也不能添加以下UISegmentedControl子視圖,因爲所有的子視圖住UISegmentedControl內。 – Keaz

+0

你可以試試這個'segmentedControl.setBackgroundImage(的UIImage(命名爲: 「purple_image」),爲:。中性,barMetrics:.DEFAULT)' 添加一個紫色的圖像作爲背景。 – Keaz