McD*_*_11 6 uisegmentedcontrol swift
在我的Swift应用程序中,我不知道如何在UISegmentControl中单独更改选定段的BGColor.我尝试了很多,只有色调正在改变.我在Objective - C中取得了成功.我不知道如何将其转换为SWIFT.请指导我.我的编码如下:
目标C.
- (IBAction)mySeg:(UISegmentedControl *)sender {
for (int i=0; i<[sender.subviews count]; i++)
{
if ([[sender.subviews objectAtIndex:i]isSelected] )
{
UIColor *tintcolor=[UIColor colorWithRed:255.0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
[[sender.subviews objectAtIndex:i] setTintColor:tintcolor]; //HERE SELECTED SEGMENT COLOR ALONE CHANGING
}
else
{
[[sender.subviews objectAtIndex:i] setTintColor:nil];
}
}
}
Run Code Online (Sandbox Code Playgroud)
迅速
@IBAction func mySegAcn(sender: UISegmentedControl) {
for(var i : Int = 0; i < sender.subviews.count; i++)
{
if((sender.subviews[i].isSelected) != nil)
{
//var tint_Color = UIColor(red: 1.0, green: 0, blue: 0, alpha: 1.0)
(sender.subviews[i] as! UIView).tintColor = UIColor .redColor() //HERE WHOLE TINT COLOR IS CHANGING
}
else
{
(sender.subviews[i] as! UIView).tintColor = nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量
gab*_*abo 12
我尝试使用isSelected,它给出了一个错误,说该方法不存在.这是另一种没有isSelected方法的方法
使用值更改事件为UISegmentControl按行的x值按顺序对段进行排序,然后循环并比较selectedSegmentIndex属性.这是一个假设分段控制4个段的示例:
@IBAction func indexChanged(sender: UISegmentedControl) {
let sortedViews = sender.subviews.sort( { $0.frame.origin.x < $1.frame.origin.x } )
for (index, view) in sortedViews.enumerate() {
if index == sender.selectedSegmentIndex {
view.tintColor = UIColor.blueColor()
} else {
view.tintColor = UIColor.lightGrayColor()
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad中为最初选择的段设置tintColor,在这种情况下它是第一个:
let sortedViews = segmentedControlOutletVariable.subviews.sort( { $0.frame.origin.x < $1.frame.origin.x } )
sortedViews[0].tintColor = UIColor.blueColor()
Run Code Online (Sandbox Code Playgroud)
斯威夫特 4
let sortedViews = segmentedControl.subviews.sorted( by: { $0.frame.origin.x < $1.frame.origin.x } )
for (index, view) in sortedViews.enumerated() {
if index == segmentedControl.selectedSegmentIndex {
view.tintColor = UIColor.red
} else {
view.tintColor = UIColor.green
}
}
Run Code Online (Sandbox Code Playgroud)
iOS 13 和 Swift 5
尝试使用这个扩展:
extension UISegmentedControl {
func setSelectedSegmentForegroundColor(_ foregroundColor: UIColor, andTintColor tintColor: UIColor) {
if #available(iOS 13.0, *) {
self.setTitleTextAttributes([.foregroundColor: foregroundColor], for: .selected)
self.selectedSegmentTintColor = tintColor;
} else {
self.tintColor = tintColor;
}
}
}
Run Code Online (Sandbox Code Playgroud)
称呼:
segmentedControlName.setSelectedSegmentForegroundColor(.white, andTintColor: .black);
Run Code Online (Sandbox Code Playgroud)
Swift 代码的问题在于对可选值的处理:
(sender.subviews[i].isSelected) != nil即使为isSelectedfalse,也会为 true。
尝试使用 Swift 语法编写循环
for subview in (sender.subviews as! [UIView]) {
if (subview.isSelected) {
subview.tintColor = UIColor.redColor()
}
else {
subview.tintColor = nil
}
}
Run Code Online (Sandbox Code Playgroud)
至少在该循环中,您实际上是在测试子视图是否被选择,而不是视图是否不为零。
| 归档时间: |
|
| 查看次数: |
12992 次 |
| 最近记录: |