-1

我正在尝试实现一种简单的方法来格式化UITextField为具有某种特定格式的货币字段UIKeyboardType。对于格式,我分配了一个代表并让它处理它。

我的 .h 文件包含:@interface UITextField (Currency)... @interface CurrencyTextFieldDelegate <UITextFieldDelegate>,我的 .m 文件打印在下面。

我希望能够做一个UITextField *textField = [...]; [textField formatAsCurrency];. 数字键盘显示正确,但从不调用 shouldChangeCharactersInRange。

我的猜测是,一旦执行 formatAsCurrency,代表就会被释放?我不知道。有什么想法吗?

#import "CurrencyTextFieldDelegate.h"

@implementation UITextField (Currency)

- (void)formatAsCurrency {
    CurrencyTextFieldDelegate *delegateViewController = [[CurrencyTextFieldDelegate alloc] init];
    self.delegate = delegateViewController;
    self.keyboardType = UIKeyboardTypeNumberPad;
}

@end

@implementation CurrencyTextFieldDelegate

@synthesize storedAmount = _storedAmount;

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"shouldChangeCharactersInRange");
    // magic happens
    return NO;
}

@end
4

1 回答 1

0

我想让在不同的 ViewController 上创建多个以相同方式解释的字段变得容易。我扩展UITextField了一个parseCurrencyField-方法,将键盘设置为小键盘,其他一些东西,最重要的是设置委托。

我对这个问题的问题是如何让代理保持活力,我的解决方案只是在我的 AppDelegate 中定义它。

现在我可以UITextField在我的应用程序中的任何地方执行 a [textField parseCurrencyTextField],它会...被解析为货币字段:)

就那么简单。

于 2013-03-25T14:10:51.880 回答