Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 显示以编程方式创建的UITextView/UITextField的剪切/复制/粘贴菜单_Ios_Swift - Fatal编程技术网

Ios 显示以编程方式创建的UITextView/UITextField的剪切/复制/粘贴菜单

Ios 显示以编程方式创建的UITextView/UITextField的剪切/复制/粘贴菜单,ios,swift,Ios,Swift,与从情节提要中创建UITextView或UITextField相比,我似乎无法获得默认行为 我将视图控制器中的文本视图实例化为如下属性: lazy var descriptionTextView: UITextView = { let tv = UITextView(frame: .zero) tv.font = UIFont.systemFont(ofSize: UIFont.systemFontSize) tv.clipsToBounds = t

与从情节提要中创建UITextView或UITextField相比,我似乎无法获得默认行为

我将视图控制器中的文本视图实例化为如下属性:

lazy var descriptionTextView: UITextView = {
       let tv = UITextView(frame: .zero)
        tv.font = UIFont.systemFont(ofSize: UIFont.systemFontSize)
        tv.clipsToBounds = true
        tv.layer.cornerRadius = 5.0
        tv.layer.borderWidth = 0.25
        tv.translatesAutoresizingMaskIntoConstraints = false
        return tv
    }()
loadView
中,我将其添加到视图并配置自动布局。它显示正确,所以这不是问题所在

我的问题是,在该文本视图中选择文本时,我希望显示以下菜单(截图取自故事板项目):

我所看到的只是菜单栏,如果选择了单个单词,则显示更正建议;如果选择了多个单词,则甚至什么都没有。如何在编程方法中获得相同的行为

编辑:

下面是我如何将textview添加到视图中(简化后,这里省略了其他视图):

当我在文本字段中选择一个单词时,我只得到更正建议:

当我选择多个单词时,菜单根本不会弹出:

试试这个例子:

@objc func longPressEventHandler(sender: UILongPressGestureRecognizer) {
    guard sender.state == .began,
        let senderView = sender.view,
        let superView = sender.view?.superview
        else { return }

    // Make responsiveView the window's first responder
    senderView.becomeFirstResponder()

    // Set up the shared UIMenuController
    let cutMenuItem = UIMenuItem(title: "Cut", action: #selector(cutTapped))
    let copyMenuItem = UIMenuItem(title: "Copy", action: #selector(copyTapped))
    UIMenuController.shared.menuItems = [cutMenuItem, copyMenuItem]

    // Tell the menu controller the first responder's frame and its super view
    UIMenuController.shared.setTargetRect(senderView.frame, in: superView)

    // Animate the menu onto view
    UIMenuController.shared.setMenuVisible(true, animated: true)
}

原来我是通过实现
场景(场景:UIScene,willConnectTo会话:UISceneSession,options connectionOptions:UIScene.connectionOptions)引入问题的。
错误地:

实际上,在设置
window?.windowScene=windowScene
之前,我调用了
makeKeyAndVisible()

似乎标准的剪切/复制/粘贴菜单包含在该属性中

因此,为了澄清这一点,这里有
将连接到
的错误…:

guard let windowScene = (scene as? UIWindowScene) else { return }

window = UIWindow(frame: UIScreen.main.bounds)

let mainViewController = ProjectTableViewController()

let navigationController = UINavigationController()
navigationController.setViewControllers([mainViewController], animated: false)

window?.rootViewController = navigationController
window?.makeKeyAndVisible()
window?.windowScene = windowScene //that's too late... :-(
…以下是工作代码:

guard let windowScene = (scene as? UIWindowScene) else { return }

window = UIWindow(frame: UIScreen.main.bounds)

let mainViewController = ProjectTableViewController()

let navigationController = UINavigationController()
navigationController.setViewControllers([mainViewController], animated: false)

window?.rootViewController = navigationController
window?.windowScene = windowScene //that's better :-)
window?.makeKeyAndVisible()


我知道:犯了一个多么愚蠢的错误——我希望我的回答能帮助任何遇到这个问题的人……

不应该有问题。您能告诉我们如何将textView添加为子视图吗?按照你所说的,给我们看看你现在看到的菜单。谢谢你的建议;对我原来的帖子做了编辑。从我在网上发现的情况来看,我认为菜单栏是默认的,如果我希望某个特定的菜单点不在那里,我需要采取行动(比如防止剪切/复制)。。。但事实上,与故事板相比,我以编程方式创建文本字段的结果并不相同……这是一个有趣的问题。这应该不是小事,但你是否考虑过并尝试过创建一个新的项目,做你在当前项目中正在做的事情,从那里开始,看看这两个项目之间有什么区别?你是对的:不应该有问题——我刚刚从头开始创建了一个新的示例项目,它确实在那里工作。。。在这种情况下,必须比较这两个项目……如果你仍然无法解决,也没有人回答你的问题,考虑共享你的项目,尤其是如果它不是生产项目的话。祝你好运。谢谢你的意见-我不能让它工作,虽然。。。我正在创建
@objc
函数
cutTapped
copytaped
,并在使用
tv.addGestureRecognizer(UIGestureRecognizer(目标:self,操作:#选择器(longPressEventHandler(发送者:)))实例化文本视图时,将手势识别器添加到文本视图中。
。但是未调用
longPressEventHandler
-我缺少什么?使用按钮事件对其进行校准
guard let windowScene = (scene as? UIWindowScene) else { return }

window = UIWindow(frame: UIScreen.main.bounds)

let mainViewController = ProjectTableViewController()

let navigationController = UINavigationController()
navigationController.setViewControllers([mainViewController], animated: false)

window?.rootViewController = navigationController
window?.windowScene = windowScene //that's better :-)
window?.makeKeyAndVisible()