Как программно загрузить пользовательское представление XIB, написанное на Swift, в контроллер Objective-C

Я создал XIB для UIView с именем popUpView.xib и связанный с ним файл popUpView.swift.

Мой код popUpView.swift выглядит так:

@objc class popUpView: UIView {

    @IBOutlet weak var containerView: UIView!
    @IBOutlet weak var mobileNumberTF: UITextField!
    @IBOutlet weak var customerIdTF: UITextField!
    @IBOutlet weak var panNumberTF: UITextField!
    @IBOutlet weak var cancelBtn: UIButton!
    @IBOutlet weak var saveBtn: UIButton!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initSubViews()
    }        
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.initSubViews()
    }
    
    func initSubViews() {
        
        let name = String(describing: type(of: self))
        let nib = UINib(nibName: name, bundle: .main)
        nib.instantiate(withOwner: self, options: nil)
        
        self.addSubview(self.containerView)
        self.containerView.translatesAutoresizingMaskIntoConstraints = false
        self.addConstraints()
    }
    
    func addConstraints() {
        NSLayoutConstraint.activate([
            self.topAnchor.constraint(equalTo: containerView.topAnchor),
            self.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
            self.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
            self.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
        ])
    }
}

Теперь я пытаюсь загрузить это представление как всплывающее окно в моем ViewController, написанном на Objective-C.

В моем ViewController я звоню так:

-(void)showPopUpView {
    
         popUpView *popUpView = [[popUpView alloc] initWithFrame:CGRectZero];
        [self.view addSubview:popUpView];
        [popUpView.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:25].active = YES;
        [popUpView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor constant:25].active = YES;
        [popUpView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor constant:25].active = YES;
        [popUpView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor constant:25].active = YES;    
}

В viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    [self showPopUpView];
}

I think I might be doing it the wrong way. What is the right way to load this custom view programatically in Obj-C?
Источник
  • 0
    Я думаю, вам не хватает ограничений для всплывающего окна ViewController. В чем именно проблема?
  • 0
    @Arun Я добавил ограничения, но просмотр не отображается. Я вызываю его из метода viewDidLoad ().
  • 0
    Возможно, добавьте translatesAutoresizingMaskIntoConstraints = false для всплывающего окна
  • 1
    Это поможет stackoverflow.com/questions/863321/…
  • 0
    @Arun Мне не удалось загрузить представление программно. Но теперь, после того как я посмотрел в myViewController XIB и предоставил класс представления как popUPView, я могу показать. На самом деле это не то, что я хотел, но сейчас он работает нормально .. В любом случае спасибо за помощь.
  • 0
    Пожалуйста, направьте мой ответ
Codelisting
за 0 против

Мне стало любопытно с тех пор, как я делал это в последний раз, поэтому я создал проект, чтобы проверить это. Вот как это работает у меня.

Мой xib: Изображение 289106

Мой PopupView.m Изображение 289107

Мой ViewController.m Изображение 289108

Добавлен код в это репозиторий GitHub: https://github.com/ArunEA/ObjcViewWithNib

Codelisting
Популярные категории
На заметку программисту