ios - Swift 自定义键盘 - 在键盘长按时显示额外的字母弹出窗口?

标签 ios swift keyboard custom-keyboard uilongpressgesturerecogni

我的应用程序中有一个自定义键盘扩展,它是使用 swift 开发的。他们的键盘工作正常。我想添加在长按键盘按钮(如默认 iOS 键盘)时显示带有额外字符的弹出窗口的功能。像这样:

enter image description here

我搜索了很多,但大多数都没有回答,回答的都在 Obj-C 中。我对 Obj-C 知之甚少,对快速编程也很陌生。

我已经看了this , thisthis .但这些都没有太大帮助。

非常感谢任何帮助。

最佳答案

<强>1。在您的 View 上添加按钮
(这只是为了向您展示)

let btn: UIButton=UIButton(frame: CGRect(x: 5, y: 70, width: 30, height: 30))
     btn.setTitle("A", for: .normal)
    btn.setTitleColor(UIColor.black, for: .normal);
     self.view.addSubview(btn)

<强>2。在您的按钮上添加长按手势

     let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress(sender:)))
longGesture.minimumPressDuration = 1.2
        btn.addGestureRecognizer(longGesture)

<强>3。处理长按手势 ,

您可以添加 PopUpView 并在其上添加一些按钮,

⚠️ Note: You have Multiple buttons so you have to check From CGPoint on Which Button it was tapped on

  func longPress( sender: Any) {
            
            let longPressGesture = sender as! UILongPressGestureRecognizer

//Only run this code When State Begain
if longPressGesture.state != UIGestureRecognizerState.Began {
            return
     }
// if PopUpView is Already in added than remove and than  add
 if let checkView = self.view.viewWithTag(1001) as? UIView {
         // remove popView
        popUpView .removeFromSuperview()
   }
            
            let tapLocation = longPressGesture.location(in: self.view)
            
            
            popUpView=UIView(frame: CGRect(x: tapLocation.x-10, y: tapLocation.y-65, width: 150, height: 60))
            popUpView.backgroundColor=UIColor.orange
            popUpView.layer.cornerRadius=5
            popUpView.layer.borderWidth=2
            popUpView.tag=1001
            popUpView.layer.borderColor=UIColor.black.cgColor
            
            let btn0: UIButton=UIButton(frame: CGRect(x: 5, y: 5, width: 30, height: 30))
            btn0.setTitle("A1", for: .normal)
            btn0.setTitleColor(UIColor.black, for: .normal);
            btn0.layer.borderWidth=0.5
            btn0.layer.borderColor=UIColor.lightGray.cgColor
            
            popUpView.addSubview(btn0)
            
            let btn1: UIButton=UIButton(frame: CGRect(x: 35, y: 5, width: 30, height: 30))
            btn1.setTitle("A2", for: .normal)
            btn1.setTitleColor(UIColor.black, for: .normal);
            btn1.layer.borderWidth=0.5
            btn1.layer.borderColor=UIColor.lightGray.cgColor
            
            popUpView.addSubview(btn1)
            
            let btn2: UIButton=UIButton(frame: CGRect(x: 70, y: 5, width: 30, height: 30))
            btn2.setTitle("A2", for: .normal)
            btn2.setTitleColor(UIColor.black, for: .normal);
            btn2.layer.borderWidth=0.5
            btn2.layer.borderColor=UIColor.lightGray.cgColor
            
            popUpView.addSubview(btn2)
            
            btn0.addTarget(self, action: #selector(self.buttonAction(sender:)),
                             for: UIControlEvents.touchUpInside)
            btn1.addTarget(self, action: #selector(self.buttonAction(sender:)),
                           for: UIControlEvents.touchUpInside)
            btn2.addTarget(self, action: #selector(self.buttonAction(sender:)),
                           for: UIControlEvents.touchUpInside)
     
             self.view.addSubview(popUpView)
            
           
        }

<强>4。处理额外的按钮按下

(在这里做你的东西添加从 SuperView 中删除 popUpView)

      func buttonAction( sender: Any) {
            
            // Do your Stuff Here
            
            
            //Than remove popView
            popUpView .removeFromSuperview()
        }

结果

enter image description here

✅ Note: You can Draw custom Shape of PopUpView Using UIBezierPath

关于ios - Swift 自定义键盘 - 在键盘长按时显示额外的字母弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109200/

相关文章:

ios - 堆栈 View 中控件的辅助功能

c++ - 从 C++ 库创建一个 Swift 共享框架

android - 如何在android上模拟PC的Esc键

android - 如何在所有设备上渲染 ♦ (Unicode Black Diamond Suit)?

ios - TableView 折叠/展开部分

swift - 如何在 Swift 3 中将函数设置为函数参数

iOS 号召性用语工具提示组件

c# - AltGr 与 LeftCtrl

java - 告诉 java 要听哪个键盘

ios - iOS 中音频文件耗时的毫秒(及更高)精度