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

Ios 以编程方式将imageview添加到所有ViewController,ios,swift,dynamic,uiviewcontroller,imageview,Ios,Swift,Dynamic,Uiviewcontroller,Imageview,有一个要求,比如向所有ViewController添加imageview,但我有150多个xib,在每个xib中添加imageview很耗时 有没有一种通用的方法?我在谷歌上搜索了一下,但没有找到任何有用的东西 任何帮助都将不胜感激。TL;不,博士。根据我对你想象的理解,不,你不能编写一个函数将UIImageView添加到每个ViewController中 长答覆: 您需要为每个视图创建一个单独的控制器swift文件,并在该文件中进行设置。您可以创建一个支持文件,在其中设置ImageView,然

有一个要求,比如向所有ViewController添加imageview,但我有150多个xib,在每个xib中添加imageview很耗时

有没有一种通用的方法?我在谷歌上搜索了一下,但没有找到任何有用的东西


任何帮助都将不胜感激。

TL;不,博士。根据我对你想象的理解,不,你不能编写一个函数将UIImageView添加到每个ViewController中

长答覆:

您需要为每个视图创建一个单独的控制器swift文件,并在该文件中进行设置。您可以创建一个支持文件,在其中设置ImageView,然后为每个视图控制器调用viewDidLoad。(您甚至可以将其作为UIView的扩展,这样您就可以调用类似于
self.setUpImageView()


我个人的建议是尽快放弃XIB,务实地重建一切。我知道丢掉所有的工作是件令人头痛的事,但除了良好的实践之外,最终还是值得的。我有一个文件,我发现,使自动布局轻而易举,我可以与你分享,如果你愿意。我过去也很喜欢故事板和XIB,但它们是一种麻烦,不再值得了,在这种情况下会让人头疼

您可以为UIView编写扩展,将imageview添加到UIView中,并将其运行到ViewController中的每个视图中

extension UIView {
    func addImage() {
        let imageView = UIImageView(frame: frame)
        imageView.image = UIImage(named: "Your Image Name")
        addSubview(imageView)
        imageView.didMoveToSuperview()
    }
}

如果像这样使用基类,这将很容易

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 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
还可以使用不同的ViewController更改图像。 像


创建不带情节提要的新
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
s的代理

import UIKit

class MainViewController: BaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
现在您在
MainViewController
中有了这个
ImageView
,所有
ViewController
都有
BaseViewContoller
作为代理


希望对大家有用。我的英语也很抱歉。

您应该为图像视图和设置自定义类文件。如果您使用的是基本ViewController,您可以通过编程方式将其添加到其中。不,我没有使用基本ViewController。只要有普通的xibs样式,我觉得方法很快!!!->@SPatel方法swizzling有太多的缺点,我也在使用firebase
放下XIB
为什么???
实用地重新创建一切
它是否经济高效??NoIt可以通过继承或方法实现swizzling@SPatel据我所知,几乎所有的应用程序开发人员都拒绝使用故事板,而大多数生产应用程序也不这样做,因为它必须更健壮、更省时。如果我在uiview上添加imageview,并且我必须在uiview的最后一层添加,那么我添加的其他控件将排在第一位。这似乎是创建问题,您可以为此提供屏幕截图吗当然,请稍等,抱歉,但imgur在此处被阻止。但你可以做到。只要在视图中添加uilabel并用基本视图继承viewcontroller,您将面临相同的问题。实际上,我无法识别您的问题。如果我在uiview上添加imageview,并且我必须在uiview的最后一层添加,那么我添加的其他控件将首先出现。这似乎造成了问题