Question

I am trying to invoke -(BOOL) textFieldShouldClear:(UITextField *)textField when UITextField's clear button is tapped. I have already set my delegate and UITextField's other delegate's methods are being called correctly, except this one. Clear Button is set to "is always visible" in nib file.

EDIT

FYI I am showing FPPopover when textfield's text is changed. if I tap on clear button without showing popover, clear button works fine. But if I try to tap it when popover is being displayed, delegate method is not called.

Code Snippet

-(BOOL) textFieldShouldClear:(UITextField *)textField
{
    return YES;
}

- (IBAction)didChangeScripText:(id)sender {

    NSString *text = isPortrait ? symbolTextField.text : landsymbolTextfield.text;

    if(scripList.count == 0)
    {
        if([Logs sharedManager].scripData.count > 0)
            [self extractScrips];
        else
            return;
    }

    //        SAFE_ARC_RELEASE(popover);
//        popover=nil;

        //the controller we want to present as a popover
        if(controller == nil)
            controller = [[scripComboViewController alloc] initWithStyle:UITableViewStylePlain];

        if(controller.scripListFiltered.count > 0)
            [controller.scripListFiltered removeAllObjects];

        controller.delegate = self;
        if(popover == nil){
            popover = [[FPPopoverController alloc] initWithViewController:controller];
            popover.tint = FPPopoverDefaultTint;
        }

    controller.scripListFiltered = [NSMutableArray arrayWithArray:[scripList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@",text]]];
    NSLog(@"array is: %@",controller.scripListFiltered);

    if(controller.scripListFiltered.count == 0)
    {
        [popover dismissPopoverAnimated:YES];
        return;
    }
        //decide contentsize and arrow dir based on tableview height

        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        {
            popover.contentSize = CGSizeMake(300, 500);
        }
        else {
            popover.contentSize = CGSizeMake(200, 200);
        }

        //sender is the uitextfield
    float height = isPortrait ? portTable.frame.size.height : landTable.frame.size.height;
    if(height > 0)
        popover.arrowDirection = FPPopoverArrowDirectionDown;
    else
        popover.arrowDirection = FPPopoverArrowDirectionUp;

    if(![popover isModalInPopover])
        [popover presentPopoverFromView:sender];

    [controller reloadTable];

}

What is going wrong? Can anyone tell me. Thanks.

Était-ce utile?

La solution

Actually problem is due to FPPopover. When it receives touch event outside its view, it dismisses itself, and no interaction with outside controls is possible at that time. So if tap clear button, it will be used to dismiss the pop up and then I am able to use clear button. Thats all.

Autres conseils

Use clearButtonMode property of UITextField. not need to use textFieldShouldClear method.

textFiled.clearButtonMode = UITextFieldViewModeAlways;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top