如何使两个分段控件在同一UIViewController中工作?l IOS SWIFT3

如何使两个分段控件在同一UIViewController中工作?l IOS SWIFT3,ios,swift3,Ios,Swift3,在表视图中,我可以这样选择多个数据源 if(tableView==self.tableOutletName) 但当涉及到细分市场时,我应该怎么做? 这里我有3个分段控件 @IBOutlet weak var segmentView1: SJFluidSegmentedControl! @IBOutlet weak var segmentView2: SJFluidSegmentedControl! @IBOutlet weak var segmentView3: SJFluidSegment

在表视图中,我可以这样选择多个数据源 if(tableView==self.tableOutletName)

但当涉及到细分市场时,我应该怎么做? 这里我有3个分段控件

@IBOutlet weak var segmentView1: SJFluidSegmentedControl!

@IBOutlet weak var segmentView2: SJFluidSegmentedControl!

@IBOutlet weak var segmentView3: SJFluidSegmentedControl!
我将如何重写此函数

func numberOfSegmentsInSegmentedControl(_ segmentedControl: SJFluidSegmentedControl) -> Int 

{

    return 6

}
这样我就可以分别给每个段控制6 4和3段

这里更新了代码,我遇到了致命错误

进口基础 导入UIKit

导入SJFluidSegmentedControl

类数据源2:UIViewController,SJFluidSegmentedControlDataSource{ @IBOutlet弱var段视图1:SJFluidSegmentedControl

@IBOutlet weak var segmentView2: SJFluidSegmentedControl!

@IBOutlet weak var segmentView3: SJFluidSegmentedControl!
func numberOfSegmentsInSegmentedControl(_ segmentedControl: SJFluidSegmentedControl) -> Int {


    switch segmentedControl {
    case segmentView1: return 6
    case segmentView2: return 4
    case segmentView3: return 3
    default: return 3
    }


}
func segmentedControl(_ segmentedControl: SJFluidSegmentedControl,
                      titleForSegmentAtIndex index: Int) -> String? {
    if index == 0 {
        return "None".uppercased()
    } else if index == 1 {
        return "1 Hrs".uppercased()
    }
    else if index == 2 {
        return "2 Hrs".uppercased()
    }
    else if index == 3 {
        return "3 Hrs".uppercased()
    }
    else if index == 4 {
        return "12 Hrs".uppercased()
    }
    else if index == 5 {
        return "24 Hrs".uppercased()
    }
    return "0".uppercased()
}

func segmentedControl(_ segmentedControl: SJFluidSegmentedControl,
                      gradientColorsForSelectedSegmentAtIndex index: Int) -> [UIColor] {
    switch index {
    case 0:
        return [UIColor(red: 51 / 255.0, green: 149 / 255.0, blue: 182 / 255.0, alpha: 1.0),
                UIColor(red: 97 / 255.0, green: 199 / 255.0, blue: 234 / 255.0, alpha: 1.0)]
    case 1:
        return [UIColor(red: 227 / 255.0, green: 206 / 255.0, blue: 160 / 255.0, alpha: 1.0),
                UIColor(red: 225 / 255.0, green: 195 / 255.0, blue: 128 / 255.0, alpha: 1.0)]
    case 2:
        return [UIColor(red: 21 / 255.0, green: 94 / 255.0, blue: 119 / 255.0, alpha: 1.0),
                UIColor(red: 9 / 255.0, green: 82 / 255.0, blue: 107 / 255.0, alpha: 1.0)]
    case 3:
        return [UIColor(red: 51 / 255.0, green: 149 / 255.0, blue: 182 / 255.0, alpha: 1.0),
                UIColor(red: 97 / 255.0, green: 199 / 255.0, blue: 234 / 255.0, alpha: 1.0)]
    case 4:
        return [UIColor(red: 227 / 255.0, green: 206 / 255.0, blue: 160 / 255.0, alpha: 1.0),
                UIColor(red: 225 / 255.0, green: 195 / 255.0, blue: 128 / 255.0, alpha: 1.0)]
    case 5:
        return [UIColor(red: 21 / 255.0, green: 94 / 255.0, blue: 119 / 255.0, alpha: 1.0),
                UIColor(red: 9 / 255.0, green: 82 / 255.0, blue: 107 / 255.0, alpha: 1.0)]        default:
        break
    }
    return [.clear]
}

func segmentedControl(_ segmentedControl: SJFluidSegmentedControl,
                      gradientColorsForBounce bounce: SJFluidSegmentedControlBounce) -> [UIColor] {
    switch bounce {
    case .left:
        return [UIColor(red: 51 / 255.0, green: 149 / 255.0, blue: 182 / 255.0, alpha: 1.0)]
    case .right:
        return [UIColor(red: 9 / 255.0, green: 82 / 255.0, blue: 107 / 255.0, alpha: 1.0)]
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    segmentView1.layer.borderColor = UIColor.blue.cgColor
    segmentView1.layer.borderWidth = 2
    segmentView1.layer.cornerRadius = 25
    segmentView1.clipsToBounds = true

    segmentView2.layer.borderColor = UIColor.blue.cgColor
    segmentView2.layer.borderWidth = 2
    segmentView2.layer.cornerRadius = 25
    segmentView2.clipsToBounds = true

    segmentView3.layer.borderColor = UIColor.blue.cgColor
    segmentView3.layer.borderWidth = 2
    segmentView3.layer.cornerRadius = 25
    segmentView3.clipsToBounds = true
}

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
}

}

您可以
切换

switch segmentedControl {
    case segmentView1: return 6
    case segmentView2: return 4
    case segmentView3: return 3
    default: return 0
}

记住将
self
设置为所有分段控件的数据源

您可以
切换

switch segmentedControl {
    case segmentView1: return 6
    case segmentView2: return 4
    case segmentView3: return 3
    default: return 0
}

记住将
self
设置为所有分段控件的数据源

在数据源方法中使用switch/if语句,如下所示:

func numberOfSegmentsInSegmentedControl(_ segmentedControl: SJFluidSegmentedControl) -> Int {
    switch segmentedControl {
    case segmentView1 : 
         return 6
    case segmentView2 : 
         return 4
    case segmentView3 :
         return 3
    default :
         return 0
    }
}

在数据源方法中使用switch/if语句,如下所示:

func numberOfSegmentsInSegmentedControl(_ segmentedControl: SJFluidSegmentedControl) -> Int {
    switch segmentedControl {
    case segmentView1 : 
         return 6
    case segmentView2 : 
         return 4
    case segmentView3 :
         return 3
    default :
         return 0
    }
}


您可以始终为每个分段控件数据源创建单独的类,而不是将所有分段控件数据源指向同一视图控制器。这比在代码中使用switch/if/else语句更简洁。

您可以始终为每个分段控件数据源创建单独的类,而不是将所有分段控件数据源指向同一个视图控制器。这将比在代码中使用switch/if/else语句更干净。

这就是我所做的,但我遇到了致命错误。。数据源通过故事板提供。已将日志上载到tinyPICs。。因此,当我返回所有3段的公共计数时,它起作用了。。当我试图为每个控件返回超过1个计数时,它就崩溃了。@rollingZtoned这可能是由于没有正确连接插座造成的。检查您的插座是否已连接。另外,错误发生在哪一行?如果它实际发生在
SJFluidSegmentedControl
类中,则这可能是库中的错误。错误发生在case segmentView1:return 6和segmentsCount=dataSource.numberOfSegmentsInSegmentedControl(self)上。。我还将粘贴库代码。。是的,所有的插座都是合适的。。我用过的图书馆。。当我给出一个通用的返回计数时,它就起作用了。。但是,当我想根据每个控件进行个性化设置时,它会崩溃。@Rollingz根据您给我的信息进行设置,我确信您没有正确连接插座。打印
段视图1
。如果为零,则表示您没有正确连接插座。这是我所做的,但我遇到了致命错误。。数据源通过故事板提供。已将日志上载到tinyPICs。。因此,当我返回所有3段的公共计数时,它起作用了。。当我试图为每个控件返回超过1个计数时,它就崩溃了。@rollingZtoned这可能是由于没有正确连接插座造成的。检查您的插座是否已连接。另外,错误发生在哪一行?如果它实际发生在
SJFluidSegmentedControl
类中,则这可能是库中的错误。错误发生在case segmentView1:return 6和segmentsCount=dataSource.numberOfSegmentsInSegmentedControl(self)上。。我还将粘贴库代码。。是的,所有的插座都是合适的。。我用过的图书馆。。当我给出一个通用的返回计数时,它就起作用了。。但是,当我想根据每个控件进行个性化设置时,它会崩溃。@Rollingz根据您给我的信息进行设置,我确信您没有正确连接插座。打印
段视图1
。如果为零,则说明您没有正确连接插座。错误发生在哪里?以及错误消息?将视图控制器设置为分段控件的数据源。案例分段视图1:return 6和分段Count=datasource时发生错误。numberOfSegmentsInSegmentedControl(self)。。我还将粘贴库代码。。是的,所有的插座都是合适的。。我用过的图书馆。错误发生在哪里?以及错误消息?将视图控制器设置为分段控件的数据源。案例分段视图1:return 6和分段Count=datasource时发生错误。numberOfSegmentsInSegmentedControl(self)。。我还将粘贴库代码。。是的,所有的插座都是合适的。。我用过的图书馆。创建从NSObject和数据源委托协议继承的类SegmentView1数据源。添加仅处理segmentView1数据的协议函数。创建此类的实例并将其设置为segmentView1的数据源。对segmentView2和segmentView3重复此操作。您可能需要在视图控制器中保留对这些数据源类的引用,因为委托引用可能很弱。好的,添加单独的数据源类并稍微重写库有助于解决此问题。@Spads在选择段时如何准确调用函数。我一直在到处寻找,但始终找不到它。我发现我们必须使用
func segmentedControl(uu segmentedControl:SJFluidSegmentedControl,titleForSegmentAtIndex:Int)->字符串?{}
函数。我们必须使用类顶部的委托来创建从NSObject继承的类SegmentView1数据源和数据源委托协议。添加仅处理segmentView1数据的协议函数。创建此类的实例并将其设置为segmentView1的数据源。对segmentView2和segmentView3重复此操作。您可能需要在视图控制器中保留对这些数据源类的引用,因为委托引用可能很弱。好的,添加单独的数据源类并稍微重写库有助于解决此问题。@Spads在选择段时如何准确调用函数。我一直在到处找,但找不到它。我发现我们必须使用
func segmentedControl(u segmentedControl