我对iphone编程很新,在这里我遇到了一些问题。现在在我的应用程序中,我有两个文本字段,我想在第二个文本字段开始编辑时触发事件。现在我正在使用以下功能
- (void)textFieldDidBeginEditing:(UITextField *)textField
但事情是在第一个文本字段开始编辑时触发了事件。它不等待第二个文本字段。有没有什么办法可以将这个函数用于第二个文本字段,或者可能以某种方式知道并传递活动文本字段的值?
我尝试在函数中编写textfield的名称而不是(UITextField *)textField,但结果仍然相同。
答案 0 :(得分:26)
如果我是你,我会将第二个textField
的标签(在Interface Builder中)设置为2或类似的东西。然后你可以这样做:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
if (textField.tag == 2) {
//this is textfield 2, so call your method here
}
}
编辑:请执行此操作以查看是否甚至调用该方法:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
NSLog(@"The method was called");
}
Swift 2.2
func textFieldDidBeginEditing(textField: UITextField) {
if textField.tag == 2 {
//this is textfield 2, so call your method here
}
}
答案 1 :(得分:16)
每次开始编辑任何文本字段时都会调用该委托方法,因此应该控制在发生这种情况时所执行的操作。我建议你做一些事情:
-(void)textFieldDidBeginEditing: (UITextField *)textField
{
if (textField == mySecondTextField)
{
//Do what you need
}
else
{
//Do nothing
}
}
我希望它可以帮到你!
答案 2 :(得分:4)
利用Interface Builder中的tag property在运行时识别应用程序中的视图对象。这将使生活变得更加轻松,特别是当您准备好为不同语言本地化您的应用程序时。
在视图控制器的头文件中
#define kUsernameField 100
#define kPasswordField 101
#define kStartButton 300
在视图控制器实现文件中
- (void)textFieldDidBeginEditing:(UITextField *)textField {
switch (textField.tag) {
case kUsernameField:
// do user name stuff
break;
case kPasswordField:
// do password stuff
break;
default:
NSLog(@"No case statement for %@", [textField description]);
break;
}
}
你会发现很多教程都使用UIButton的title字段来识别它们。例如:
- (IBAction)buttonTouchUp:(id)sender {
UIButton *button = (UIButton *)sender;
// don't like
if ([button.currentTitle isEqualToString:@"Start"] == NSOrderedSame) {
// because if localize your for other language then you will have
// include code for those other language
// French: Démarrer
// Spanish: Inicio
// blah blah blah
}
// better
if (button.tag == kStartButton) {
// very simple, no code changes for localization
// blah blah blah
}
}
如果要使用代码创建对象,可以设置标记:
button.tag = kStartButton;
// or
[button setTag:kStartButton];
答案 3 :(得分:2)
您必须先在控制器UITextFieldDelegate
.h
并设置文本字段的委托。恩。 myInput.delegate = self;
-(void)textFieldDidBeginEditing:(UITextField *)sender
{
if ([sender isEqual:myInput])
{
NSLog(@"test");
}
}
这对我来说很有效。
答案 4 :(得分:1)
您是否检查过您的第二个textViews委托是否设置为self?我有同样的问题,我忘了设置其他textFields的委托,因此委托方法没有解雇。
答案 5 :(得分:0)
请在本期杂志中查看我的答案,这正是您所需要的 Objective C: what is a "(id) sender"?