2010-07-20 53 views
2

我在视图上有3个UITextFileds,并且我想仅在其中两个应用UITextFieldDelegate方法中使用逻辑,如何确定触发回调的UITextField?如何比较UITextField的实例

非常感谢提前!

回答

7

通常情况下,简单的指针比较有效,因为你只是想检查对象的身份。可以将.tag分配给文本字段。

-(BOOL)textFieldShouldReturn:(UITextField*)textField { 
    if (textField.tag != 37) { 
     ... 

的优点是你不需要参考存储theIgnoredTextField,标签可以从界面生成器进行设置,但是它依赖于一个认识神奇的数字“37”。

+0

...或编译的枚举常量'KTMIgnoredTextFieldTag'。我在表格视图单元配置中使用了很多。 – 2010-07-20 14:51:57

+0

@Graham:如果视图完全由代码构造,那么这很好,但在IB中AFAIK不能输入像“KTMIgnoredTextFieldTag”这样的非整数。 – kennytm 2010-07-20 14:56:48

+0

不,但您确实减少了可能需要将文本字段用于2的任何地方的幻数的大量数量。 – 2010-07-20 16:50:45

2

,如果您使用的是委托方法,如- (void)textFieldDidEndEditing:(UITextField *)textField所有你需要做的是做这样的事情

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
if (textField == myFirstTextField) 
{ 
//blah 
} 
else if (textField == mySecondTextField) 
{ 
//etc etc. 
} 
else 
{ 
//WHEE! 
} 
}//method end 
1

,如果你保持对它们的引用在类的ivars您可以比较指针,也可以使用UIView的标签属性,无论你喜欢什么。

4

委托方法有一个文本字段参数,它是指向文本字段对象的一个​​点。您可以将该参数与您的文本字段对象进行比较,以查看它是哪一个。

UITextField *field1, *field2, *field3; 

在您的委托方法你可以比较的参数:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == field1) { 
     // do something special for field 1 
    } ...