通过函数返回一个委托?

时间:2016-10-11 09:26:07

标签: ios swift

我正在努力尝试将UIView类中的委托返回给另一个类。

我有一个名为 Class1 的自定义UIView子类,在其中我添加了另一个具有委托的自定义 func setModuleViewFor(index1:Int,index2:Int, delegating:UIView) { let tmodule = ModuleInput(frame: CGRect(x: 0,y: 0,width: self.frame.size.width,height: self.frame.size.height)) tmodule.setWithData(index1: index1,index2: index2) tmodule.delegate= delegating //********error self.addSubview(tmodule) 子类。

Class1中的

ModuleInput

哪个错误说:

  

无法将类型UIView的值赋给ModuleInputProtocol

通常,如果 tmodule.delegate= self 位于控件视图中,我会这样做:

    super.onResume();

    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {

                HomeFragment fragObj = new HomeFragment();

                getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragObj)
                        .commit();

                return true;
            }

            return false;
        }
    });
}

它有效。

1 个答案:

答案 0 :(得分:3)

您必须使用ModuleInputProtocol

设置委派类型
func setModuleViewFor(index1:Int,index2:Int, delegating:ModuleInputProtocol) 
        {
                let tmodule  = ModuleInput(frame: CGRect(x: 0,y: 0,width: self.frame.size.width,height: self.frame.size.height))
                tmodule.setWithData(index1: index1,index2: index2)
                tmodule.delegate= delegating  //********error
                self.addSubview(tmodule)

并且当您调用setModuleViewFor方法时,委托参数必须实现ModuleInputProtocol

add:protocol protocolBase {

}

protocol protocol0:protocolBase {

}

protocol protocol1:protocolBase {

}

protocol protocol2:protocolBase {

}

protocol protocol3:protocolBase {

}

protocol protocol4:protocolBase {

}

现在你可以写这样的功能

func setModuleViewFor(index1:Int,index2:Int, delegating:protocolBase)

我的英语非常糟糕,请理解