菜鸟教程小白 发表于 2022-12-13 07:21:06

ios - 从以编程方式创建的 UITextView IOS 中删除 "Copy"菜单项


                                            <p><p>我在 viewDidLoad 中以编程方式创建 UITextView。<br/> 当我选择文本时,菜单会显示以下内容:<br/><br/>
<img src="/image/d1lyG.png" alt="enter image description here"/> </p>

<p>如图所示,我添加了两个自定义按钮,即突出显示和取消突出显示。我想删除“复制”选项并保留所有其他选项,所以我不能使其不可编辑,我需要允许用户从文本中选择他想要的任何内容,但要防止它复制内容。<br/>
我尝试了几种方法,包括所有社区都提到的这种方法:</p>

<pre><code>- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
   NSLog(@&#34;it went in canPerform&#34;);
   if (action == @selector(copy:)){

          NSLog(@&#34;It prevented the copy option and hid it from the menu&#34;);
          return NO;

   }
   return ;
}
</code></pre>

<p>为了更好地了解问题,如果选择器实际上考虑了“复制”选项,我尝试注销,这是我的日志:</p>

<pre><code>2015-05-20 11:27:47.637 MyApp it went in canPerform

2015-05-20 11:27:47.637 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.638 MyApp it went in canPerform

2015-05-20 11:27:47.663 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform

2015-05-20 11:27:47.664 MyApp it went in canPerform
</code></pre>

<p>正如它所显示的,代码正在调用“canPerformAction”,因为日志显示“它进入 canPerform”,但它没有识别“复制”操作,因为日志从未显示:“它阻止了复制选项并隐藏它来自菜单”。 <br/>因此,我的问题是我需要从选定的文本菜单中隐藏“复制”项。我错过了什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>对于所有必须处理这种情况的 future 开发人员,我知道您会感到多么沮丧,所以我将提供一个完整的教程,因为我遇到了结合了大多数已发布答案的正确答案:<br/><br/>
1 - 我<strong>只有在您以编程方式创建 UITextView 时才有效</strong>,如果您使用 Storyboard 创建它,它将不起作用,这是最重要的部分,因为如果您已经创建了 UITextView使用 Storyboard ,您将无法删除“副本”,您将能够删除其他所有内容!只是不是副本<br/><br/>
2 - 您必须继承 UITextView 类,对于所有新开发人员来说,这是通过创建一个新类并选择它作为 UITextView 的子类来完成的。<br/><br/>
3 - 您的 .h 文件将类似于 <br/><br/></p>

<pre><code>//
//myCustomClass.h
//myApp
//
//Created by Elias Rahme on 5/20/15.
//Copyright (c) 2015 Elias Rahme. All rights reserved.
//

#import &lt;UIKit/UIKit.h&gt;

@interface myCustomClass : UITextView

@end
</code></pre>

<p>您的 .m 文件将是这样的:<br/><br/></p>

<pre><code>//
//myCustomClass.m
//myApp
//
//Created by Elias Rahme on 5/20/15.
//Copyright (c) 2015 Elias Rahme. All rights reserved.
//

#import &#34;myCustomClass.h&#34;

@implementation myCustomClass


-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
   if (action == @selector(copy:)) {
          return NO;
   }
   return ;
}
@end
</code></pre>

<p>4 - 现在,在设置完所有内容之后,棘手的部分来了。在您要使用 UITextView 的类中,当然包括您的 customClass,然后,这就是您调用 textView 的方式:<br/><br/>
首先,您必须创建一个新的 UITextView,这是通过在实现上方编写 <code>UITextView *newTextView;</code> 来完成的,就像创建任何变量一样。<br/><br/>
其次,在你完成所有工作的实际类里面,转到你的 .h 文件,并确保它看起来像那样<br/><br/></p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface myActuallClassWhereIWantTheActualWorkToBeDone : UIViewController&lt; UITextViewDelegate&gt;{


}
</code></pre>

<p>第三,将以下行添加到您的 viewDidLoad 方法中:<br/><br/></p>

<pre><code> newTextView = [ initWithFrame:CGRectMake(yourX, yourY, yourWidth, yourHeight)];
newTextView.text = @&#34;This is the best small tutorial EVER!!&#34;;
newTextView.delegate = self;
</code></pre>

<p>然后,运行您的应用程序,您将看不到“复制”选项!这是一个简单而棘手的过程,我花了几个小时才真正总结了我访问过的所有网页!希望大家喜欢! </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从以编程方式创建的 UITextView IOS 中删除&#34;Copy&#34;菜单项,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30344373/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30344373/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从以编程方式创建的 UITextView IOS 中删除 &#34;Copy&#34;菜单项