関数のセレクタを別の関数に渡したいと思います。今私は文字列を渡していくつかのif文を実行しています。実際の関数セレクタを関数に渡すことができれば、if文をすべて削除することができます。すぐに機能するためのパスセレクタ(関数名)
私の現在の機能:
func getBtn(i: String, f: String) -> UIBarButtonItem
{
let btn: UIButton = UIButton();
btn.frame=CGRectMake(0,0,30,30)
btn.setBackgroundImage(UIImage(named:i), forState: UIControlState.Normal)
if f == "funcOne"{ btn.addTarget(self, action: #selector(self.funcOne), forControlEvents:.TouchUpInside) }
else if f == "funcTwo"{ btn.addTarget(self, action: #selector(self.funcTwo), forControlEvents:.TouchUpInside) }
else if f == "funcThree"{ btn.addTarget(self, action: #selector(self.funcThree), forControlEvents:.TouchUpInside) }
else if f == "funcFour"{ btn.addTarget(self, action: #selector(self.funcFour), forControlEvents:.TouchUpInside) }
// etc.
let barBtn = UIBarButtonItem(customView: btn)
return barBtn;
}
使用法:私は行うことができるようにしたいのですがどのような
items.append(self.getBtn("checkmark",f:"funcOne"));
:
func getBtn(i: String, f: SOME_TYPE_OF_THING) -> UIBarButtonItem
{
let btn: UIButton = UIButton();
btn.frame=CGRectMake(0,0,30,30)
btn.setBackgroundImage(UIImage(named:i), forState: UIControlState.Normal)
btn.addTarget(self, action: #selector(f), forControlEvents:.TouchUpInside)
let barBtn = UIBarButtonItem(customView: btn)
return barBtn;
}
は使用方法:
items.append(self.getBtn("checkmark",f:self.funcOne));
ありがとうございます。私は間違いがない。まさに私が望んでいたもの。今ビルドでテストされます。 –
完璧に動作します。ありがとう。 2分で受け入れます。 –
喜んで助けてください。これを単にアクションの初期段階に '#selector 'の使用を"後退させる "方法と考えてください。呼び出し先で実行するのではなく、呼び出し元で実行します。 – matt