如何在iPhone中以编程方式执行复制/粘贴功能?

46

我有一个文本视图,其中包含一些文本和一个复制按钮。

当用户输入一些文本并按下复制按钮时,需要将该文本复制并粘贴到他想要的任何位置。

我知道iOS中有一个默认的复制/粘贴菜单控制器,但我想在按钮点击中实现此功能。我认为可以使用UIPasteboard来实现此功能,但我不知道如何使用它。

5个回答

115

从按钮点击中复制:

- (IBAction)copy {
    UIPasteboard *pb = [UIPasteboard generalPasteboard];
    [pb setString:[textView text]];
}

要从按钮点击粘贴:

- (IBAction)paste {
    UIPasteboard *pb = [UIPasteboard generalPasteboard];
    textView.text = [pb string];
}

在文本视图中只选择了部分文本。如何复制和粘贴仅选定的部分而不是整个文本。 - Star
如果您愿意始终替换TextView的现有内容,那么这将起作用。如果您想要在光标位置粘贴,则这不足够。 - Ben Packard

24

Swift

这是被接受答案的 Swift 版本。

复制

UIPasteboard.general.string = myTextView.text

粘贴

if let myString = UIPasteboard.general.string {
    myTextView.insertText(myString)
}

7

对于使用MonoTouch的开发人员,以下是我在C#中完成任务所使用的两行代码。

cavenger提供给这个问题的答案为我的答案提供了模板(在我成功地将其实现到我的项目中之后;-)

UIPasteboard clipboard = UIPasteboard.General;
clipboard.String =  "string being added to clipboard";

1
声明显式变量clipboard没有太大意义。如果您将UIPasteboard.General内联,则会缩短两倍的代码:) - Grigory
为了举例子而明确表达......但我也喜欢一行代码。;-) - benhorgen

6

不确定为什么我们不能简单地使用:

[theTextView paste:nil];

根���UIResponder文档

4

在您的原始问题中添加一些代码,展示您如何触发按钮操作,然后使用[UIPasteboard dataForPasteboardType:]方法从剪贴板中获取数据。如果这仍然对您不起作用,我可以尝试编辑我的答案,向您展示它将如何工作。 - Michael Dautermann
我把这段代码放进去了,但在点击复制按钮后应用程序崩溃了。-(IBAction)_clickbtncopynotes:(id)sender { [UIPasteboard dataForPasteboardType:textView.text]; } - ICoder
这不是调用代码的方式(它只是描述你可能使用的标准方式)。你可能需要执行类似于 textView.text = [[UIPasteboard generalPasteboard] dataForPasteboardType: @"public.utf8-plain-text"] 的操作。请仔细查看我指向你的 Apple 示例,看看他们如何从剪贴板中检索数据。 - Michael Dautermann
请查看我之前的回答并尝试回答我的评论。 - Star

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