112

画面を押し下げると、のUITextViewコピー、切り取り、選択、すべて選択の機能がデフォルトで表示されます。しかし、私のプロジェクトでUITextFieldは読み取り専用です。この機能は必要ありません。この機能を無効にする方法を教えてください。

4

31 に答える 31

110

ペーストボード操作を無効にする最も簡単な方法は、許可したくないアクションに対してメソッドをUITextViewオーバーライドするサブクラスを作成することです。canPerformAction:withSender:NO

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}

UIResponderも参照してください

于 2009-09-15T19:58:16.607 に答える
67

UITextView をサブクラス化し、canBecomeFirstResponder を上書きします。

- (BOOL)canBecomeFirstResponder {
    return NO;
}

これは、編集不可の UITextView にのみ適用されることに注意してください。編集可能なものでテストしていません...

于 2010-08-06T19:46:24.807 に答える
30

これは私にとって最良の解決策でした:

UIView *overlay = [[UIView alloc] init];  
[overlay setFrame:CGRectMake(0, 0, myTextView.contentSize.width, myTextView.contentSize.height)];  
[myTextView addSubview:overlay];  
[overlay release];

から: https://stackoverflow.com/a/5704584/1293949

于 2012-03-26T21:46:51.087 に答える
28

すべて UITextViewのアプリケーションで切り取り/コピー/貼り付けを無効にしたい場合は、次のカテゴリを使用できます。

@implementation UITextView (DisableCopyPaste)

- (BOOL)canBecomeFirstResponder
{
    return NO;
}

@end

サブクラスを保存します... :-)

于 2011-11-04T17:39:13.437 に答える
20

スクロールするのに UITextView が必要ない場合、サブクラス化を伴わない最も簡単な解決策は、テキスト ビューのユーザー インタラクションを単純に無効にすることです。

textField.userInteractionEnabled = NO;
于 2010-11-09T15:46:07.233 に答える
15

最も簡単な方法は、canPerformAction:withSender:をオーバーライドするUITextViewのサブクラスを作成することです。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender    
{    
     [UIMenuController sharedMenuController].menuVisible = NO;  //do not display the menu
     [self resignFirstResponder];                      //do not allow the user to selected anything
     return NO;
}
于 2010-04-24T06:13:22.050 に答える
13

iOS 7 の canPerformAction で NO を返すと、次のような多くのエラーが発生します。

<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

私の解決策は次のとおりです。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO];
    }];
    return [super canPerformAction:action withSender:sender];
}

秘訣は、メイン キューの次のサイクルでメニュー コントローラーを非表示にすることです (表示された直後)。

于 2014-03-04T12:34:44.803 に答える
9

これは、UITextView で選択/コピー/貼り付けメニュー全体を無効にする最も簡単な方法です。

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{    
    [UIMenuController sharedMenuController].menuVisible = NO;
    return NO;    
}
于 2009-11-10T18:54:53.420 に答える
4

iOS 7 以降、UITextView にプロパティがあります。

 @property(nonatomic,getter=isSelectable) BOOL selectable;

これにより、ビューでテキストを選択できなくなります。私にとってはうまくいきます。

于 2014-02-23T17:16:29.940 に答える
3

これは、ストーリーボード (Xcode 6) で簡単に実行できます。Attributes Inspector で Editable and Selectable のチェックを外すだけです。テキスト ビューをスクロールすることもできます。ここに画像の説明を入力

于 2015-08-13T02:31:33.067 に答える
3

これは私にとってはうまくいきました。textViewでresignFirstResponderを呼び出していることを確認してください

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
  [self.textView resignFirstResponder];
  return NO;
}
于 2013-03-24T11:05:33.550 に答える
2

私はそれをやった。私のUITextView場合、カット、コピー、選択などのオプションを非常に簡単に無効にしました。

を配置しUIViewたのと同じ場所に配置しましたUITextViewが、次のようにメソッドをself.view追加しました。touchDelegate

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *scrollTouch=[touches anyObject];
    if(scrollTouch.view.tag==1)
    {
        NSLog(@"viewTouched");
        if(scrollTouch.tapCount==1)
            [textView1 becomeFirstResponder];
        else if(scrollTouch.tapCount==2)
        {
            NSLog(@"double touch");
            return;
        }

    }
}

そしてそれは私のために働いた。ありがとうございました。

于 2009-11-09T19:25:17.413 に答える
1

iOS >=13.0 バージョンを探している場合は、UIResponder までの任意のレベルの実装でこの拡張機能を使用できます。

extension UITextField {
  override var editingInteractionConfiguration: UIEditingInteractionConfiguration {
      return .none
  }
}
于 2020-09-17T10:02:02.723 に答える
0

(SWIFT)メニュー オプションや虫めがねのない基本的なテキスト フィールドだけが必要な場合は、UITextField のサブクラスを作成して false をgestureRecognizerShouldBegin に返します。

class TextFieldBasic: UITextField {
    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {

        return false
    }
}

これにより、テキスト フィールドのすべてのタッチ機能がバイパスされますが、ポップアップ キーボードを使用して文字を追加/削除することはできます。

ストーリーボードを使用している場合は、新しく作成したクラスをテキスト フィールドに割り当てるか、プログラムでテキスト フィールドを作成している場合:

var basicTextField = TextFieldBasic()
basic = basicTextField(frame: CGRectMake(10, 100, 100,35))
basic.backgroundColor = UIColor.redColor()
self.view.addSubview(basic)

basic.becomeFirstResponder()
于 2015-09-24T12:59:57.820 に答える
0
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool 
{
    NSOperationQueue .mainQueue().addOperationWithBlock({ () -> Void in   

        [UIMenuController .sharedMenuController() .setMenuVisible(false, animated: true)]

    })
    return super.canPerformAction(action, withSender: sender)}
于 2016-01-06T12:59:25.473 に答える