Custom View的Swift协议始终为空

问题描述 投票:0回答:1

我在我的应用中有一个自定义视图CustomSegmentedControl,其协议的索引功能如下,

protocol SegmentControllerDelegate:class  {
    func indexChanged(index : Int)
}

class CustomSegmentedControl: UIView {

    weak var delegate  : SegmentControllerDelegate?

    @objc func buttonAction(sender:UIButton) {
        for (buttonIndex, btn) in buttons.enumerated() {
            btn.setTitleColor(textColor, for: .normal)
            if btn == sender {
                let selectorPosition = frame.width/CGFloat(buttonTitles.count) * CGFloat(buttonIndex)
                selectedIndex = buttonIndex
               //delegate?.changeToIndex(index: buttonIndex)
                if(delegate != nil){
                    delegate?.indexChanged(index: buttonIndex)
                }else{
                    print(buttonIndex)
                }
                UIView.animate(withDuration: 0.3) {
                    self.selectorView.frame.origin.x = selectorPosition
                }
                btn.setTitleColor(selectorTextColor, for: .normal)
            }
        }
    }

[我在ViewController Mail中添加了一个视图,并将该类设置为我的自定义视图,并为其设置插座并使用协议,如下所示,

import UIKit

class Mail: UIViewController, SegmentControllerDelegate {

    func indexChanged(index: Int) {
        print(index)
        switch index {
        case 0:
            container.bringSubviewToFront(inbox)
            break
            case 1:
            container.bringSubviewToFront(outbox)
            break
        default:
            break
        }
    }




    @IBOutlet weak var segment: CustomSegmentedControl!{
        didSet{
            segment.setButtonTitles(buttonTitles: ["First","Second"])
            segment.selectorTextColor = .orange
            segment.selectorViewColor = .orange

        }
    }


    @IBOutlet weak var container: UIView!

    var inbox  : UIView!
    var outbox : UIView!
    override func viewDidLoad() {
        super.viewDidLoad()

        segment.delegate = self
        inbox = Inbox().view
        outbox = GPS().view
        container.addSubview(inbox)
        container.addSubview(outbox)


    }

但是协议总是为零,函数永远不会被调用!?,我在这里缺少什么?

任何帮助将不胜感激

ios swift swift-protocols
1个回答
0
投票

您从未设置过代理,因此请在此处设置

 segment.selectorViewColor = .orange
 segment.delegate = self

weak var delegate  : SegmentControllerDelegate?

为了避免保留周期

© www.soinside.com 2019 - 2024. All rights reserved.