のカット コピー ペースト メニューを のように有効にすることはできます
UILabel
かUITextField
?そうでない場合、および に変換する必要がある場合
UILabel
、UITextField
カット コピー ペースト メニューを有効にしてコンテンツを変更できないようにするにはどうすればよいですか?
12 に答える
でコピー&ペーストメニューが機能するようになりました。ラベルが画面に表示されるときUILabel
に戻っYES
てcanBecomeFirstResponder
、後で呼び出す必要がありました。から[label becomeFirstResponder]
戻る場合は、カテゴリを使用してカスタム サブクラスまたはパッチを作成できます。YES
canBecomeFirstResponder
UILabel
@implementation UILabel (Clipboard)
- (BOOL) canBecomeFirstResponder
{
return YES;
}
@end
カテゴリ ソリューションは少しハックに感じますが、何をしているのかを知っていれば、サブクラス化よりも簡単かもしれません。また、簡単なペーストボード メニューを .NET ファイルに表示する方法を示すサンプル プロジェクトを GitHub に公開UILabel
しました。
@zoulの回答によるgithubのサンプルプロジェクトが道です。これを書いている時点では、そのプロジェクトは実際にはクリップボード (ペーストボード) に何も置いていません。方法は次のとおりです。
このメソッドの @zoul の実装を次のように変更します。
- (void) copy:(id)sender {
UIPasteboard *pboard = [UIPasteboard generalPasteboard];
pboard.string = self.text;
}
長押しすると「コピー」オプションを使用して UIMenuController を表示するオープンソースの UILabel サブクラスを作成しました。
GitHubの HTCopyableLabel
私は zoul のサンプル プロジェクトをフォークし、ARC (および他のいくつかの機能) のサポートを追加しました。
https://github.com/zhbrass/UILabel-Clipboard
CopyLabel.h/.m はあなたが探しているものでなければなりません
UITextField
インスタンスのメソッドをオーバーライドし、編集を無効にするためtextFieldShouldBeginEditing
に return に設定します。NO
詳細については、UITextFieldDelegate
プロトコルをご覧ください。
複数行のテキストがある場合は、使用する必要がありますUITextView
デリゲートを設定します。
func textView(_ textView: UITextView,
shouldChangeTextIn range: NSRange,
replacementText text: String) -> Bool {
return false
}
そして、それは魔法のように機能するはずです:)
@benvolioTのgithubプロジェクトは、コピーの非常に良い例です。貼り付けの場合は、をカスタマイズしcanPerformAction:withSender:
ます。詳細については、CopyPasteTileの例を参照してください。