如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图
Posted
技术标签:
【中文标题】如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图【英文标题】:How to load a custom XIB view written in swift programatically in an Objective-C Controller 【发布时间】:2020-12-16 04:19:30 【问题描述】:我为 UIView 创建了一个名为 popUpView.xib 的 XIB 和一个与之关联的 swift 文件 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)
])
现在我正在尝试在我用 Objective-C 编写的 ViewController 中将此视图作为弹出窗口加载
在我的 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?
【问题讨论】:
我认为您缺少 ViewController 中弹出视图的约束。究竟是什么问题? @Arun 我已经添加了约束,仍然没有显示视图。我从 viewDidLoad() 方法调用它。 可能为弹出视图添加 translatesAutoresizingMaskIntoConstraints = false 这将有助于***.com/questions/863321/… @Arun 我无法以编程方式加载视图。但是现在,当我在 myViewController XIB 中查看视图并将视图类作为 popUPView 后,我就可以显示了。这实际上不是我想要的,但它现在工作正常.. 无论如何感谢您的帮助。 【参考方案1】:自从我上次这样做以来我就很好奇,所以我创建了一个项目来测试它。这就是它对我的工作方式。
我的 xib:
我的 PopupView.m
我的 ViewController.m
将代码添加到此 GitHub 存储库: https://github.com/ArunEA/ObjcViewWithNib
【讨论】:
以上是关于如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中以编程方式检查协议是不是包含某些方法?
如何在 Swift 中以编程方式创建 SplitViewController?
如何在Objective-C中以编程方式发送带有一些正文文本的短信[重复]
如何在 Objective-C 中以编程方式添加特定大小的 UIImageView。我也有同一个类的 xib 文件,但我不想使用它