当 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 【问题描述】:当触发editingDidBegin
的UITextField
控制事件时,如何将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的聚焦?
当点击自定义 TableView 单元格中的 UITextField 时转到新视图