首先,我将从我所做的开始,最后我会描述问题,所以它会更清楚。一般来说,在Android Studio之后,使用Xcode中的视图元素仍然是一项任务。我明白一个优秀的程序员不会两次编写相同的代码,所以每次在不同的Controller中都不会每次都描述视图元素 - 所以我在主控制器中写了这个函数
class func designForButton (button: UIButton){
button.layer.masksToBounds = true
button.layer.cornerRadius = 8
}
然后您可以在不同的Controller
中访问它class RegisterViewController: UIViewController {
@IBOutlet weak var buttonBack: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
ViewController.designForButton(button: buttonBack)
}
现在,还不清楚。我加载框架与Toast一起工作。我在主控制器中描述了它的值
func designForToast(message: String){
let style = CSToastStyle.init(defaultStyle: {
}())
_ = style?.backgroundColor = UIColor.gray
_ = style?.titleColor = UIColor.cyan
_ = style?.messageColor = UIColor.darkGray
self.view.makeToast(message, duration: 2, position: self.bottomLayoutGuide, title: "title", image: UIImage (named: "logo.jpg"), style: style ) { (success: Bool) in
}
}
但问题是,在这种情况下,我只能在同一个控制器中解决它
_=self.designForToast(message: "Its a Toast")
只要我想func ()
- 就像class func ()
在另一个控制器中工作一样,Xcode就会开始强调这是不可能的,并且由于我的经验不足,我自己也无法修复它。
答案 0 :(得分:2)
我建议您在方法中添加viewController
参数,使其如下所示:
static func showToast(message: String, on viewController: UIViewController){ // I also renamed the method as well
let style = CSToastStyle.init(defaultStyle: {
}())
_ = style?.backgroundColor = UIColor.gray
_ = style?.titleColor = UIColor.cyan
_ = style?.messageColor = UIColor.darkGray
viewController.view.makeToast(message, duration: 2, position: viewController.bottomLayoutGuide, title: "title", image: UIImage (named: "logo.jpg"), style: style ) { (success: Bool) in
}
}
我还建议您将这些“辅助函数”放在指定的类中,例如StyleHelper
或类似的东西。
然后你可以在View Controller中使用它:
StyleHelper.showToast(message: "Hello", on: self)
或者更好的是,将其作为扩展方法!
extension UIViewController {
func showMyToast(message: String){
let style = CSToastStyle.init(defaultStyle: {
}())
_ = style?.backgroundColor = UIColor.gray
_ = style?.titleColor = UIColor.cyan
_ = style?.messageColor = UIColor.darkGray
self.view.makeToast(message, duration: 2, position: self.bottomLayoutGuide, title: "title", image: UIImage (named: "logo.jpg"), style: style ) { (success: Bool) in
}
}
}
然后您可以在View Controller中使用它:
self.showMyToast(message: "Hello")
旁注:
对于符合UIAppearance
协议的视图,您可以访问appearance()
属性以全局更改其样式。例如,您可以在didFinishLaunchingWithOptions
:
UIButton.appearance().tintColor = .red
您创建的每个UIButton
都是红色的。
答案 1 :(得分:1)
我认为您需要定义一个协议,以及UIViewController的扩展,为您的方法提供默认实现......如果这是问题...:P
protocol ToastProtocol: class {
func showToast(message:String)
}
extension ToastProtocol where Self: UIViewController {
func showToast(message:String){
///yourcode
}
}
之后你可以在任何UIViewController
中使用showToast方法