在 iOS 中获取 textfield.text 时将文本字段的值更改为另一种语言

Change the value of textfield to another language when get textfield.text in iOS

当我得到 mytextfield.text 时,结果是这样的:“1234”,这是一个波斯数字“1234”。
我有一种将波斯语文本转换为英语文本的方法。

我想在使用 mytextfield.text

获取文本时获取英文文本

解决方案 1: 我可以意识到当用户更改文本字段时,我可以将其更改为我想要的。但是它的性能不好,因为用户可能想多次更改它我只是想在我想得到它的时候转换它。

您是否考虑过添加一个带有 IBAction 的 UIButton,并且只有当按钮被点击时,您才会看到文本?

@IBAction func buttonTapped(_sender : AnyObject){ // Here you get the text and convert it}

我可能不明白你的问题,但我会尝试回答。
我假设您的 UITextField 是在情节提要中设置的,并且您从代码中定义了一个出口,例如

@property(nonatomic, weak) IBOutlet UITextField *mytextfield;  

因此您可以通过程序的标识符访问文本字段。
或者,如果您确实通过程序设置了 mytextfield,您也可以用相同的方式访问它。

我假设,您知道何时需要阅读 mytextfield.text 将文本转换为英文,并且我假设您有一种将文本转换为英文的方法,例如

-(NSString)convertToEnglish:(NSString *)text {…}  

为什么不简单地读取 textField 文本并将其输入此方法,例如

NSString *englishText = [self convertToEnglish: mytextfield.text];  

但是正如我所说,我可能没有理解你的问题……

如何创建 UITextField 的 sub-class 并覆盖 .text

在您的 .h 文件中

#import <UIKit/UIKit.h>

@interface TranslatingTextField : UITextField

@end

在您的 .m 文件中

@implementation TranslatingTextField

- (NSString *)text {
    return MyTranslation(super.text); // Your translation is called here
}

@end

如果您使用的是 Interface Builder,请确保将 TranslatingTextField 指定为 class 用于您要使用此 class 为.

您可以根据需要使用 Objective-c 中的类别执行此操作,请参阅下面的实现。

UITextField+Category.h

#import <UIKit/UIKit.h>

    NS_ASSUME_NONNULL_BEGIN

    @interface UITextField (Category)

    @end

    NS_ASSUME_NONNULL_END

UITextField+Category.m

#import "UITextField+Category.h"

@implementation UITextField (Category)

- (NSString *)text {
    return ConvertToEnglish(super.text); //Call your Util function From here
}


@end

使用

     #import "UITextField+Category.h"

- (void)whenYouWant {
    //Just call txtName.text Call anywhere in the class :  
    NSLog(@"%@", self.txtName.text);
}