我有一个视图控制器,它包含n个UITextFields
和UItextViews
以及UILabels
,无论如何,如果有任何更改,我会收到通知吗?
我可以通过在他们各自的TextDidChangeNotification
和类似地手动查看它们来实现它,但我正在寻找一种更优化的方式来做到这一点,我不必担心它们中的每一个。
答案 0 :(得分:3)
// Assumes you don't use tag values now - if you do small change to create
// and index set, add the ones you use, so all new ones assigned are unique.
// assumes ARC
1)新的伊娃:
{
NSMutableDictionary *savedValues;
}
1)当您想要基线值时:
savedValues = [self snapshot];
2)最初将其调用到基线当前值,然后在任何稍后点:
- (NSMutableDictionary *)snapshot
{
NSInteger tag = 1;
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[self.view.subviews count]];
for(UIView *v in self.view.subviews) {
if([v isKindOfClass:[UILabel class]] || [v isKindOfClass:[UITextField class]] || [v isKindOfClass:[UITextView class]]) {
if(v.tag == 0) v.tag = tag++; // will happen once
// EDIT below
[dict setObject:[NSString stringWithString:[(id)v text]] forKey:[NSNumber numberWithInteger:tag]];
}
}
return dict;
}
4)当你想看看是否有任何改变时:
- (BOOL)anyChanges
{
NSDictionary *currentDict = [self snapshot];
return [currentDict isEqualToDictionary:savedValues];
}
答案 1 :(得分:0)
让您的类处理文本字段中的UIControlEventValueChanged事件,更改textview或label的值。添加此行ViewDidLoad方法:
[youLabel addTarget:self action:@selector(valueChanged:)
forControlEvents:UIControlEventValueChanged];
// add for textfield, textview also if needed
[youTextField addTarget:self action:@selector(valueChanged:)
forControlEvents:UIControlEventValueChanged];
[youTextView addTarget:self action:@selector(valueChanged:)
forControlEvents:UIControlEventValueChanged];
现在,当值发生变化时,将调用选择器
- (void) valueChanged:(id)sender{
if(sender isKindofClass[UILabel class])
{
//label value changed here to differntiate used tag
if([sender tag] == 0)
....
....
}
else if(sender isKindofClass[UITextField class])
{
// textField value changed to differntiate used tag
if([sender tag] == 0)
....
....
}
else if(sender isKindofClass[UITextView class])
{
// textview value changed to differntiate used tag
if([sender tag] == 0)
....
....
}
}
答案 2 :(得分:0)
您应该为所有textFields,textView和Labels使用一种方法。并为textFields和textViews和标签提供唯一标签。它可以帮助您定义textField,textView或Label。
if(sender.tag == 1000)//UILabel
{
UILabel *label=(UILabel *)sender
//write own code for label what do you want.
}
else if(sender.tag == 2000)//UITextField
{
UITextField *textField=(UITextField *)sender
//write own code for textField what do you want.
}
else if(sender.tag == 3000)// UITextView
{
UITextView *textView=(UITextView *)sender
//write own code for textView what do you want.
}