点击文本字段右键时如何显示 xib 视图
how to show xib view when tap on textfield right button
我想在点击文本字段右键时显示一个弹出视图,我试过了
下面的代码但是当点击文本字段右键时视图不显示。
,我用 "CustomeView" class 名称创建了 xib 视图,如下所示,我是
,正在尝试加载警报视图
class ViewController: UIViewController, UITextFieldDelegate {
let textFieldRightButton = UIButton(type: .infoLight)
var textFieldOne:UITextField? = nil
var alertview:UIView? = nil
override func viewWillAppear(_ animated: Bool) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: {
self.showAlertViewWithTextField(title: "Test", msg: "Test Custome View", okActionTitle: "continue", cancelActionTitle: "Cancel", success: {
print("Continue")
}) {
print("Cancel")
}
})
}
func showAlertViewWithTextField(title: String, msg: String, okActionTitle:String, cancelActionTitle:String, success: (() -> Void)? , cancel: (() -> Void)?)
{
let alert = UIAlertController(title: title, message: msg, preferredStyle: UIAlertController.Style.alert)
alertview = alert.view
textFieldRightButton.tintColor = UIColor.red
alert.addTextField
{
(textField) in
textField.placeholder = "Enter text."
textField.delegate = self
textField.rightViewMode = .always
textField.rightView = self.textFieldRightButton
}
textFieldOne = alert.textFields?.first
textFieldRightButton.addTarget(self, action: #selector(showPopupMsg), for: .touchUpInside)
let successAction: UIAlertAction = UIAlertAction(title: okActionTitle, style: .destructive)
{
action -> Void in
success?()
}
let cancelAction: UIAlertAction = UIAlertAction(title: cancelActionTitle, style: .cancel)
{
action -> Void in
cancel?()
}
alert.addAction(successAction)
alert.addAction(cancelAction)
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
}
@objc func showPopupMsg() {
alertview?.addSubview(CustomeView(frame: CGRect(x: textFieldOne!.frame.minX, y: textFieldOne!.frame.minX, width: 100, height: 50)))
}
}
下面是我的自定义视图
class CustomeView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var messageText: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("CustomeView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
如何在视图控制器中显示此 nib 视图?
我尝试了您的代码片段,但遇到了错误的访问错误。尝试删除该 xib 文件的自定义 class (CustomeView),并在该 xib 文件的 File's Owner
中设置 CustomeView
视图 class。还要检查您的 messageText
和 contentView
出口对象类型应该是 File's Owner
.
我想在点击文本字段右键时显示一个弹出视图,我试过了 下面的代码但是当点击文本字段右键时视图不显示。 ,我用 "CustomeView" class 名称创建了 xib 视图,如下所示,我是 ,正在尝试加载警报视图
class ViewController: UIViewController, UITextFieldDelegate {
let textFieldRightButton = UIButton(type: .infoLight)
var textFieldOne:UITextField? = nil
var alertview:UIView? = nil
override func viewWillAppear(_ animated: Bool) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: {
self.showAlertViewWithTextField(title: "Test", msg: "Test Custome View", okActionTitle: "continue", cancelActionTitle: "Cancel", success: {
print("Continue")
}) {
print("Cancel")
}
})
}
func showAlertViewWithTextField(title: String, msg: String, okActionTitle:String, cancelActionTitle:String, success: (() -> Void)? , cancel: (() -> Void)?)
{
let alert = UIAlertController(title: title, message: msg, preferredStyle: UIAlertController.Style.alert)
alertview = alert.view
textFieldRightButton.tintColor = UIColor.red
alert.addTextField
{
(textField) in
textField.placeholder = "Enter text."
textField.delegate = self
textField.rightViewMode = .always
textField.rightView = self.textFieldRightButton
}
textFieldOne = alert.textFields?.first
textFieldRightButton.addTarget(self, action: #selector(showPopupMsg), for: .touchUpInside)
let successAction: UIAlertAction = UIAlertAction(title: okActionTitle, style: .destructive)
{
action -> Void in
success?()
}
let cancelAction: UIAlertAction = UIAlertAction(title: cancelActionTitle, style: .cancel)
{
action -> Void in
cancel?()
}
alert.addAction(successAction)
alert.addAction(cancelAction)
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
}
@objc func showPopupMsg() {
alertview?.addSubview(CustomeView(frame: CGRect(x: textFieldOne!.frame.minX, y: textFieldOne!.frame.minX, width: 100, height: 50)))
}
}
下面是我的自定义视图
class CustomeView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var messageText: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("CustomeView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
}
如何在视图控制器中显示此 nib 视图?
我尝试了您的代码片段,但遇到了错误的访问错误。尝试删除该 xib 文件的自定义 class (CustomeView),并在该 xib 文件的 File's Owner
中设置 CustomeView
视图 class。还要检查您的 messageText
和 contentView
出口对象类型应该是 File's Owner
.