如何在iOS的文本选择编辑菜单中添加自定义操作?

12

我需要在 iOS 的 UITextView 中添加一个自定义操作到编辑菜单中,该菜单在用户选择某些文本时弹出。
我该如何做呢?

3个回答

22
class ViewController: UIViewController, UITextViewDelegate {

   @IBOutlet weak var textView: UITextView!

   override func viewDidLoad() {
      super.viewDidLoad()

      addCustomMenu()
   }

   func addCustomMenu() {
      let printToConsole = UIMenuItem(title: "Print To Console", action: #selector(printToConsole))
      UIMenuController.shared().menuItems = [printToConsole]
   }

   func printToConsole() {
      if let range = textView.selectedTextRange, let selectedText = textView.text(in: range) {
         print(selectedText)
      }
   }
}

这是一个文本选择菜单项的例子,它将 UITextView 中的文本更改为红色。 changeToRedFunc 可以执行任何您想要的操作。

注意:这是在Swift 3中实现的 (如果需要Swift 2.3版本,请询问)

希望这可以帮到您!如果您有任何问题,请随时问!:D


谢谢,这非常有帮助。有没有办法:
  1. 只在选择文本时显示我的自定义操作
  2. 将其移动到操作列表的前面(即“剪切”操作之前)
  3. 获取所选文本
- TomLisankie
经过一些研究,我不确定1和2是否可行。2可能是可行的,但需要从最可能是私有苹果API的内容中创建自己的文本选择菜单(不允许)。至于3,我已编辑我的示例以将所选文本打印到控制台。@Shaken_Earth - Ike10

4

SWIFT 5

class ViewController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var textView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

         addCustomMenu()
    }


    func addCustomMenu() {
       //Xcode doesn't like printToConsole being a var and a function call
       let printToConsole = UIMenuItem(title: "Print To Console", action: #selector(printToConsole2))

        UIMenuController.shared.menuItems = [printToConsole]
    }

    @objc func printToConsole2() {
       if let range = textView.selectedTextRange, let selectedText = textView.text(in: range) {
          print(selectedText)
       }
    }
}

0
这是如何在Swift 5中创建自定义编辑菜单的方法:
import UIKit

class ViewController: UIViewController {

    @IBOutlet var textfield: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let changeBackground = UIMenuItem(title: "Change Background Colour", action: #selector(changeBackgroundColour))
        UIMenuController.shared.menuItems = [changeBackground] //will add it to everything that has
    
    }

    @objc func changeBackgroundColour()
    {
        self.view.backgroundColor = .cyan //just makes the background colour cyan
    }

}

我还制作了一个YouTube视频,在这里解释了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接