как узнать, когда текст копируется из определенного текстового поля в цели c? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть несколько текстовых полей, которые можно редактировать. когда пользователь выбирает текст, копируются и вставляются пункты меню.
Я хочу знать, когда пользователь нажимает на копию. потому что я хочу изменить скопированный текст.
Является ли это возможным?

Подробнее: Я хочу изменить копию 3 текстовых полей. Я хочу объединить все эти 3 текста текстовых полей в буфер обмена, когда копируется одно из текстовых полей. На этой странице есть и другие текстовые поля, но я не хочу ничего для них делать.

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Вы можете реализовать метод copy(), чтобы "перехватить" операцию копирования и изменить то, что помещено в буфер обмена.

Самый простой способ - это, вероятно, простой подкласс UITextField:

//
//  MyTextField.h
//
//  Created by Don Mag on 5/29/19.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface MyTextField : UITextField

@end

NS_ASSUME_NONNULL_END

и

//
//  MyTextField.m
//
//  Created by Don Mag on 5/29/19.
//

#import "MyTextField.h"

@implementation MyTextField

- (void)copy:(id)sender {

    // debugging
    NSLog(@"copy command selected");

    // get the selected range
    UITextRange *textRange = [self selectedTextRange];

    // if text was selected
    if (textRange) {

        // get the selected text
        NSString *selectedText = [self textInRange:textRange];

        // change it how you want
        NSString *modifiedText = [NSString stringWithFormat:@"Prepending to copied text: %@", selectedText];

        // get the general pasteboard
        UIPasteboard *pb = [UIPasteboard generalPasteboard];

        // set the modified copied text to the pasteboard
        pb.string = modifiedText;
    }

}

@end
0 голосов
/ 29 мая 2019

Вы можете получить скопированную строку из буфера обмена и обновить до буфера обмена перед вставкой.

NotificationCenter.default.addObserver(self, selector: #selector(clipboardChanged),
                                               name: UIPasteboard.changedNotification , object: nil)

@objc func clipboardChanged() {
    if let clipboardString = UIPasteboard.general.string as? String {
        // Update string as per your requirement
        let myString = textfield1.text! + " " + textfield2.text! + " " + textfield3.text! + " Append String"
        textfield1.text = myString
        textfield2.text = myString
        textfield3.text = myString
        print(myString)
    }
}
...