2017-04-17 68 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