I want to show a popup view when tap on textfield right button, I tried below code but view is not showing when tap on textfield right button. , I created xib view with "CustomeView" class name as below and I am , trying to load in alert view
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)))
}
}
below is my custom view
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]
}
}
How can I show this nib view in view controller?
I tried with your code snippet and I got bad access error. Try removing the custom class (CustomeView) of that xib file and set the CustomeView
view class in File's Owner
of that xib file. Also check your messageText
and contentView
outlet object type should be the File's Owner
.