textFieldDidBeginEditing:用于多个文本字段

|| 我对iPhone编程相当陌生,在这里我面临一些问题。现在在我的应用程序中,我有两个文本字段,我想在第二个文本字段开始编辑时触发一个事件。现在我正在使用以下功能
- (void)textFieldDidBeginEditing:(UITextField *)textField
但事实是,第一个文本字段开始编辑时会触发该事件。它不等待第二个文本字段。有什么方法可以对第二个文本字段使用此功能,或者以某种方式可以知道并传递活动文本字段的值? 我尝试在函数中编写文本字段的名称而不是(UITextField *)textField的名称,但结果仍然相同。     
已邀请:
如果我是您,则将第二个ѭ1的标签(在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
    }
}
    
每当开始对ANY文本字段进行编辑时,都会调用该委托方法,因此应该由您来控制发生这种情况时要执行的操作。我建议你做这样的事情:
   -(void)textFieldDidBeginEditing: (UITextField *)textField
   {     
        if (textField == mySecondTextField)
        {
            //Do what you need
        }
        else
        {
            //Do nothing
        }
   }
希望对您有帮助!     
利用Interface Builder中的tag属性在运行时标识应用程序中的视图对象。这将使工作变得更加轻松,特别是当您准备好将应用程序本地化为不同的语言时。 在您的视图控制器的头文件中
#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的标题字段来识别它们。例如:
- (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];
    
您必须在控制器
.h
中声明第一个
UITextFieldDelegate
并设置您的文本字段的委托。例如
myInput.delegate = self;
-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    if ([sender isEqual:myInput])
    {
        NSLog(@\"test\");

    }
}
这对我来说非常有效。     
您是否检查了第二个textViews委托是否设置为self?我有一个相同的问题,我忘记设置其他textFields的委托,因此委托方法没有触发。     
请看看我在这个问题中的答案,这正是您要寻找的 目标C:什么是“(id)发送者”?     

要回复问题请先登录注册