画面を押し下げると、のUITextView
コピー、切り取り、選択、すべて選択の機能がデフォルトで表示されます。しかし、私のプロジェクトでUITextField
は読み取り専用です。この機能は必要ありません。この機能を無効にする方法を教えてください。
31 に答える
ペーストボード操作を無効にする最も簡単な方法は、許可したくないアクションに対してメソッドをUITextView
オーバーライドするサブクラスを作成することです。canPerformAction:withSender:
NO
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(paste:))
return NO;
return [super canPerformAction:action withSender:sender];
}
UIResponderも参照してください
UITextView をサブクラス化し、canBecomeFirstResponder を上書きします。
- (BOOL)canBecomeFirstResponder {
return NO;
}
これは、編集不可の UITextView にのみ適用されることに注意してください。編集可能なものでテストしていません...
これは私にとって最良の解決策でした:
UIView *overlay = [[UIView alloc] init];
[overlay setFrame:CGRectMake(0, 0, myTextView.contentSize.width, myTextView.contentSize.height)];
[myTextView addSubview:overlay];
[overlay release];
すべて UITextView
のアプリケーションで切り取り/コピー/貼り付けを無効にしたい場合は、次のカテゴリを使用できます。
@implementation UITextView (DisableCopyPaste)
- (BOOL)canBecomeFirstResponder
{
return NO;
}
@end
サブクラスを保存します... :-)
スクロールするのに UITextView が必要ない場合、サブクラス化を伴わない最も簡単な解決策は、テキスト ビューのユーザー インタラクションを単純に無効にすることです。
textField.userInteractionEnabled = NO;
最も簡単な方法は、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;
}
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];
}
秘訣は、メイン キューの次のサイクルでメニュー コントローラーを非表示にすることです (表示された直後)。
これは、UITextView で選択/コピー/貼り付けメニュー全体を無効にする最も簡単な方法です。
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
[UIMenuController sharedMenuController].menuVisible = NO;
return NO;
}
iOS 7 以降、UITextView にプロパティがあります。
@property(nonatomic,getter=isSelectable) BOOL selectable;
これにより、ビューでテキストを選択できなくなります。私にとってはうまくいきます。
これは私にとってはうまくいきました。textViewでresignFirstResponderを呼び出していることを確認してください
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
[self.textView resignFirstResponder];
return NO;
}
私はそれをやった。私の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;
}
}
}
そしてそれは私のために働いた。ありがとうございました。
iOS >=13.0 バージョンを探している場合は、UIResponder までの任意のレベルの実装でこの拡張機能を使用できます。
extension UITextField {
override var editingInteractionConfiguration: UIEditingInteractionConfiguration {
return .none
}
}
(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()
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)}