当 UITextField 的“editingDidBegin”控件事件触发时,将 UITextField 的当前值设置为一个属性

Posted

技术标签:

【中文标题】当 UITextField 的“editingDidBegin”控件事件触发时,将 UITextField 的当前值设置为一个属性【英文标题】:Set the current Value of UITextField to a property when UITextField's "editingDidBegin" control event fire 【发布时间】:2018-08-13 08:19:50 【问题描述】:

当触发editingDidBeginUITextField 控制事件时,如何将UITextField 的当前值设置为在扩展UITextField 类的类别中声明的属性(通过自定义设置器)?

【问题讨论】:

简要说明您的问题。 我想在“UIControlEventEditingDidBegin”控件事件触发时将 UITextField 的当前值获取到一个变量中。我还想将此行为添加到我的所有 UITextField 对象中,以检查是否编辑了文本字段值。所以我创建了一个扩展 UITextField 类并添加一个公共属性来存储值的类别,现在我想在“UIControlEventEditingDidBegin”UITextcField 的控制事件触发时将文本字段的值设置为该属性。谢谢... 【参考方案1】:

您应该能够通过利用关联引用来使用类别来做到这一点。

From the docs:

使用关联引用,您可以向对象添加存储,而无需 修改类声明。

这里有一个例子可以让你朝着正确的方向前进:

.h 文件

@interface UITextField (StoredProperty)

@property (nonatomic, strong) NSString *testString;

@end

.m 文件

#import <objc/runtime.h>

static void *MyStoredPropertyKey = &MyStoredPropertyKey;

@implementation UITextField (StoredProperty)

- (NSString *)testString 
    return objc_getAssociatedObject(self, MyStoredPropertyKey);


- (void)setTestString:(NSString *)testString 
    objc_setAssociatedObject(self, MyStoredPropertyKey, testString, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 


@end

使用示例

NSObject *obj = [NSObject new];
obj.testString = @"This is my test string";
NSLog(@"%@", obj.testString);

【讨论】:

感谢@tww0003 的回答。我还关注了关联参考。但是当“UIControlEventEditingDidBegin”控件事件触发时,如何将UITextField的值设置为“testString”属性? @PSkyMax 您可以创建另一个类别,但这次是 UITextFieldDelegate 并将其设置在 textFieldDidBeginEditing: 方法中。希望这会有所帮助,如果确实如此,请不要忘记将答案标记为已接受!以下是相关文档:developer.apple.com/documentation/uikit/uitextfielddelegate/…

以上是关于当 UITextField 的“editingDidBegin”控件事件触发时,将 UITextField 的当前值设置为一个属性的主要内容,如果未能解决你的问题,请参考以下文章

UITextField - 当应用程序来自后台时键盘不隐藏

当我们点击它时 UItextfield 不可编辑

当用户按下其他控件/空格时,如何取消对UITextField的聚焦?

当点击自定义 TableView 单元格中的 UITextField 时转到新视图

当键盘出现在 Swift 中时 UITextField 向上移动

iOS如何选择行,当一个人选择里面的UITextField?