【问题标题】:Assignment of delegate gets released against will代表的指派被违背意愿释放
【发布时间】:2013-03-19 09:58:44
【问题描述】:

我正在尝试实现一种简单的方法将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

【问题讨论】:

  • 有点不清楚您要做什么。委托通常是文本字段出现在其视图中的控制器。您不能在类别中拥有属性(带有支持 ivar),所以我认为没有办法在类别中拥有指向委托的强指针.

标签: ios objective-c cocoa-touch delegates uitextfield


【解决方案1】:

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

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

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

就这么简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2018-05-10
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多