以编程方式将imageview添加到所有viewcontrollers

时间:2019-04-18 04:19:12

标签: ios swift dynamic uiviewcontroller imageview

有一个要求,例如向所有视图控制器添加一个imageview,但我有150多个xib,并且将imageview放入每个单独的xib中非常耗时。

有一种通用的方法吗?我用谷歌搜索,但没有发现有用的东西。

任何帮助将不胜感激。

4 个答案:

答案 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,但是它们很麻烦,不再值得了,并且在这种情况下令人头疼。