我有五个textfields
和一个动画方法。每次点击一个textfield
(所以基本上总共五次,每个textfield
只有一次),我只想调用一次动画方法。我已经尝试过,但无法找出正确的方法来做到这一点。请帮帮我。任何形式的帮助表示赞赏。谢谢。如何限制我的对象在iOS中只调用一次方法?
1
A
回答
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.
}
}
相关问题
- 1. iOS:只调用一次方法
- 2. 如何在控制器中只调用一次calla方法
- 3. iOS updateSearchResultsForSearchController只调用一次
- 4. 如何模拟一个方法中的对象方法调用?
- 5. 如何在 - (void)touchesMoved期间只调用一次方法?
- 6. String Array只调用一次方法
- 7. 如何在我的泛型方法中限制只接受一种类型?
- 8. 如何从另一个对象调用对象的方法?
- 9. 如何在对象上调用'!='方法?
- 10. 调用方法段控制器的段选择只有一次
- 11. 在同一对象中用其他方法调用对象的方法
- 12. 如何限制调用方法
- 13. 在java中只调用一次相同的方法
- 14. 如何限制一个方法只接受有一定限制的参数?
- 15. 如何强制在PHP的对象的属性或方法的方法调用?
- 16. 如何调用对象的方法
- 17. 限制方法中的代码只能调用同一类中的成员
- 18. 如何在EasyMock中声明一个方法仅在Mocked对象的方法中使用的对象上调用一次?
- 19. 我如何引用它所调用的方法内的对象?
- 20. 如何捕获在python中调用对象的任何方法?
- 21. 如何在PHP中捕获对象的任何方法调用?
- 22. 如何从控制器调用一次更多的方法? AJAX
- 23. 对ListView中的对象调用方法
- 24. iOS - NSLog如何只使用一次scrollViewDidScroll
- 25. <f:ajax> Java方法的多次调用 - 如何只做一次?
- 26. 是否可以限制如何在PHP中调用方法?
- 27. 如何多次限制函数调用
- 28. 如何在另一个对象方法中引用对象方法
- 29. 只使用ScriptManager调用JavaScript方法调用一次
- 30. 如何制作只执行一次的方法?
用你试过的东西更新你的问题,并解释你在代码中遇到的问题。 – rmaddy
只要你不需要投票,如果问题不完整。如果这是错误的,那么清楚的做到这一点。 –
为每个文本字段计数变量,并在委托方法中检查条件。 –