2015-12-15 82 views
1

我有五个textfields和一个动画方法。每次点击一个textfield(所以基本上总共五次,每个textfield只有一次),我只想调用一次动画方法。我已经尝试过,但无法找出正确的方法来做到这一点。请帮帮我。任何形式的帮助表示赞赏。谢谢。如何限制我的对象在iOS中只调用一次方法?

+0

用你试过的东西更新你的问题,并解释你在代码中遇到的问题。 – rmaddy

+0

只要你不需要投票,如果问题不完整。如果这是错误的,那么清楚的做到这一点。 –

+0

为每个文本字段计数变量,并在委托方法中检查条件。 –

回答

2

您将需要采取五项布尔变量对每个文本框。

BOOL flag1; 
BOOL flag2; 
BOOL flag3; 
BOOL flag4; 
BOOL flag5; 

默认情况下,它的值为false。因此,请在textField的委托方法textFieldShouldBeginEditing上将其设置为true,并将标签1,2,3 .. 5分配给每个textFields。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
     if(textField.tag == 1) { 
      if(flag1 == FALSE) { 
       //Call Animation method over here.. 
      } 
      flag1 = TRUE; 
     } else if (textField.tag == 2) { 
      if(flag2 == FALSE) { 
       //Call Animation method over here.. 
      } 
      flag2 = TRUE; 
     } else if //.......... and so on for other three textfields.. 
} 
0

如果我理解正确,您可能只想设置某种类型的标志,该标志设置在五个按钮中的每个按钮的按钮上。 所以如果按钮一被点击,将按钮一个标志设置为是。然后确保您的动画只在按钮标志=否时触发。

0

你需要在你的控制器五个属性:

var isTextField1Played = false 
var isTextField2Played = false 
var isTextField3Played = false 
var isTextField4Played = false 
var isTextField5Played = false 

,并在点击方法,写:

func click1() { 
    if isTextField1Played == true { 
     return 
    } 
    //Animation code 
    isTextField1Played = true 
} 
0

虽然接受的答案是正确的,工作就有点繁琐,管理和unneccesarily放大视图控制器代码。另一种方法是继承UITextField:即使一些简单是这样的:

CustomTextField.h:

#import <UIKit/UIKit.h> 

@interface CustomTextField : UITextField 

@property (nonatomic, assign) BOOL hasAlreadyAnimated; 

@end 

CustomTextField.m:

#import "CustomTextField.h" 
@implementation CustomTextField 
@end 

实现文件实际上是空的,因为我们只关心增加的属性,默认情况下它将被初始化为NO

这能够减少您的委托方法,以这样的:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if ([textField isKindOfClass:[CustomTextField class]) { // sanity check, also needed if you want to have some non-animatable text fields 
     CustomTextField *customTF = (CustomTextField *)textField; 
     if (customTF.hasAlreadyAnimated == NO) { 
      //your animation code 
     } 
     customTF.hasAlreadyAnimated = YES;    
    } 
} 

从这种方法的另一个好处是,如果你决定改变动画的文本字段的数量,您并不需要添加/删除这些标志。

该类既可以在代码中使用,也可以在Interface Builder中使用 - 如果您不知道如何使用,请检查this thread

0

为故事板中的文本字段分配标签1,2,3,4,5..etc,并像下面一样检查条件并分配新的标签值。使用下面的代码,您不需要任何额外的变量或新的自定义类。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
     if(textField.tag < 100) { //if you think there may be possibility for more than 100 text fields you can change. 
     textField.tag += 100; 
     //call Animation method here. 
     } 
} 
相关问题