如何知道何时从目标c中的特定文本字段复制文本?

时间:2019-05-29 08:14:09

标签: ios uitextfield touch

我有一些textFields是可编辑的。当用户选择其文本时,将显示复制和粘贴菜单项。
我想知道用户何时点击副本。因为我想更改复制的文本。
可能吗?

更多详细信息: 我想更改3个文本字段的副本。复制文本字段之一时,我想将所有这3个文本字段的文本连接到剪贴板中。此页面中还有其他文本字段,但是我不想为它们做任何事情。

2 个答案:

答案 0 :(得分:1)

您可以实现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

答案 1 :(得分:0)

您可以从剪贴板复制字符串并在粘贴之前更新到剪贴板。

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)
    }
}