Программно добавить viewview ко всем viewcontrollers - PullRequest
3 голосов
/ 18 апреля 2019

есть требование, например, добавить просмотр изображений для всех контроллеров представления, но у меня есть 150+ xib, и это занимает много времени, чтобы поместить viewview в каждый отдельный xib.

Есть ли общий способ сделать это? Я гуглил, но ничего полезного не нашел.

Любая помощь будет оценена.

Ответы [ 4 ]

5 голосов
/ 18 апреля 2019

Будет легко, если вы будете использовать базовый класс, подобный этому

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")
        }
}
0 голосов
/ 18 апреля 2019

Создать новый 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()
    }
}

теперь у вас есть ImageView в MainViewController, и все ViewController s имеют BaseViewContoller в качестве делегата.

Надеюсь быть полезным. Также извините за мой английский.

0 голосов
/ 18 апреля 2019

вы можете написать расширение для UIView, чтобы добавить в него изображение и запускать его во всех ваших контроллерах вида.

extension UIView {
    func addImage() {
        let imageView = UIImageView(frame: frame)
        imageView.image = UIImage(named: "Your Image Name")
        addSubview(imageView)
        imageView.didMoveToSuperview()
    }
}
0 голосов
/ 18 апреля 2019

TL; DR Нет. Основываясь на моем понимании того, что вы представляете, нет, вы не можете написать функцию для добавления UIImageView к каждому из ваших viewControllers.

Длинный ответ:

Вам необходимо создать отдельный файл swift контроллера для каждого просмотра и настроить его в этом файле. Вы можете создать вспомогательный файл, в котором вы настраиваете ImageView, затем вызываете в viewDidLoad для каждого контроллера представления. (Вы можете даже сделать это расширением UIView, чтобы вы могли просто вызвать что-то вроде self.setUpImageView())

Моя личная рекомендация - бросить xibs, как только вы сможете, и прагматично воссоздать все, я знаю, это головная боль - отбросить всю вашу работу, но в конце концов она того стоит, будучи хорошей практикой. У меня есть файл, который, как я обнаружил, делает автопутешествие легким, и я могу поделиться с вами, если хотите. Раньше я действительно получал удовольствие от раскадровок и xibs, но они доставляют неудобства, которые просто не стоят этого, и вызывают такую ​​головную боль в такой ситуации.

...