有一个要求,例如向所有视图控制器添加一个imageview,但我有150多个xib,并且将imageview放入每个单独的xib中非常耗时。
有一种通用的方法吗?我用谷歌搜索,但没有发现有用的东西。
任何帮助将不胜感激。
答案 0 :(得分:5)
如果您使用这样的基类将很容易
class BaseVC: UIViewController
{
var imageView:UIImageView = UIImageView.init()
override func viewDidLoad() {
super.viewDidLoad()
addImageView()
}
override func viewWillAppear(_ animated: Bool) {
//self.view.bringSubview(toFront: imageView) //To bring imageview infront of other views put this method as per your requirement
}
func addImageView(name:String = "default")
{
let image = UIImage(named: name)
imageView.image = image
imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
//view.addSubview(imageView)
view.insertSubview(imageView, at: 0) /*For put image view below all image*/
}
}
您需要像这样从中派生所有视图控制器
class YourVC: BaseVC
您还可以使用不同的视图控制器更改图像。 像
class YourVC: BaseVC
{
override func viewDidLoad() {
super.viewDidLoad()
addImageView(name:"xyz")
}
}
答案 1 :(得分:0)
您可以为UIView编写扩展,以将imageview添加到其中,并将其运行到每个ViewController中。
https://www.nytimes.com/2019/04/17/us/politics/trump-mueller-report.html
答案 2 :(得分:0)
创建没有情节提要的新ViewController
。
import UIKit
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setImageView()
}
func setImageView() {
let thisImageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 70, height: 70))
thisImageView.image = UIImage(named: "your image name")
view.addSubview(thisImageView)
}
}
现在您可以将此BaseViewController
设置为项目的ViewController
的委托。
import UIKit
class MainViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
现在您在ImageView
中有这个MainViewController
,并且所有ViewController
都有BaseViewContoller
作为委托。
希望有用。也对我的英语感到抱歉。
答案 3 :(得分:-2)
TL; DR否。基于我对您所想象的理解,不,您不能编写将UIImageView添加到每个viewController的函数。
长答案:
您需要为每个视图创建一个单独的控制器swift文件,并将其设置在该文件中。您可以创建一个支持文件,在其中设置ImageView,然后在每个视图控制器的viewDidLoad中调用。 (您甚至可以将其作为UIView的扩展,因此可以仅调用self.setUpImageView()
之类的东西)
我个人的建议是尽快删除xib,并务实地重新创建所有内容。我知道,将所有工作都扔掉是一件令人头疼的事,但最终值得做的只是良好的实践。我发现有一个文件使自动排版变得轻而易举,如果您愿意,可以与您共享。我以前曾经很喜欢自己的故事板和Xibs,但是它们很麻烦,不再值得了,并且在这种情况下令人头疼。