我在视图上有3个UITextFileds,并且我想仅在其中两个应用UITextFieldDelegate方法中使用逻辑,如何确定触发回调的UITextField?如何比较UITextField的实例
非常感谢提前!
我在视图上有3个UITextFileds,并且我想仅在其中两个应用UITextFieldDelegate方法中使用逻辑,如何确定触发回调的UITextField?如何比较UITextField的实例
非常感谢提前!
通常情况下,简单的指针比较有效,因为你只是想检查对象的身份。可以将.tag
分配给文本字段。
-(BOOL)textFieldShouldReturn:(UITextField*)textField {
if (textField.tag != 37) {
...
的优点是你不需要参考存储theIgnoredTextField
,标签可以从界面生成器进行设置,但是它依赖于一个认识神奇的数字“37”。
,如果您使用的是委托方法,如- (void)textFieldDidEndEditing:(UITextField *)textField
所有你需要做的是做这样的事情
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField == myFirstTextField)
{
//blah
}
else if (textField == mySecondTextField)
{
//etc etc.
}
else
{
//WHEE!
}
}//method end
,如果你保持对它们的引用在类的ivars您可以比较指针,也可以使用UIView的标签属性,无论你喜欢什么。
委托方法有一个文本字段参数,它是指向文本字段对象的一个点。您可以将该参数与您的文本字段对象进行比较,以查看它是哪一个。
UITextField *field1, *field2, *field3;
在您的委托方法你可以比较的参数:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == field1) {
// do something special for field 1
} ...
...或编译的枚举常量'KTMIgnoredTextFieldTag'。我在表格视图单元配置中使用了很多。 – 2010-07-20 14:51:57
@Graham:如果视图完全由代码构造,那么这很好,但在IB中AFAIK不能输入像“KTMIgnoredTextFieldTag”这样的非整数。 – kennytm 2010-07-20 14:56:48
不,但您确实减少了可能需要将文本字段用于2的任何地方的幻数的大量数量。 – 2010-07-20 16:50:45