2017-04-17 15 views
3

から私はこのサブビューにプロパティを追加するときに、それはアプリ内で他のUISegmentedControlsから再利用可能な拡張から私のUISegmentedControl以下のサブビューを追加しようとしています。セグメント化されたコントロールサブビュー延長

それは正しい場所に表示されますが、何らかの理由で時には、以下のいくつかのセグメントと上に表示されます。何か不足していますか?私の拡張機能でこれまで

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); 
    } 
} 

そして、私はのViewControllerでviewDidLoadメソッドから拡張機能を呼び出します。

self.segmentedControlUnit.addBackgroundView(); 
+0

このリンクを試す:http://www.richardhsu.me/posts/2015/01/26/segmentedcontrol.html – KKRocks

+0

回答のコメントを読んで、最良の解決策は(1) UISegmentedControlの代わりにUIViewをサブクラス化する、(2)UISegementedControlをサブビューとして追加する、(3)UIViewとUISegmentedControlの各クラスに必要なものを公開し、(4)多かれ少なかれ、*拡張*の代わりに*順序と*サブクラス化*を逆転させることで、望ましい結果を得ることができますか? – dfd

答えて

0

インデックス0にbackgroundViewを挿入して、すべてのサブビューの下にあることを確認してください。

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

こんにちはルアン、提案に感謝しますが、それでも同じことが起こります –

+0

あなたの期待は何ですか?たぶん私はそれを行う別の方法があります。 –

+0

押された画像によっては、添付された画像の中に、紫色の画像が下に表示されずに表示され、セグメントテキストを読み取ることができない場合があります。それは問題です –

1

私はあなたがこれを行うことはできないと思います。私は2番目のセグメントを選択すると、これは、 enter image description here UI階層であると私はあなたが選ぶどのようなセグメントに応じて、第三のセグメントに

ので、セグメント位置の変更を選択した場合、これはUI階層です。

+0

それは私が理解していない動作です。それはバグか何か?それは、セグメントの一部だけでなく、上記の全体の構成要素ではないと考えられていますか? Interface Builderから下のビューを追加しようとしましたが、それは動作します。コード経由で同じであってはなりませんか? –

+0

これはデフォルトの動作だと思います。 UISegmentedControlをラップすることで、独自のカスタムコントローラを作成する必要があります。すべてのサブビューがUISegmentedControl内に存在するため、UISegmentedControlの下にサブビューを追加することもできません。 – Keaz

+0

あなたはこの 'segmentedControl.setBackgroundImage試すことができます(UIImage(命名: "purple_imageを")、のために:.normal、barMetrics:.DEFAULT)' を背景として、紫色の画像を追加します。 – Keaz