简体   繁体   中英

disabling multitouch not working ios

I have a view controller(VC) having 3 buttons(country , state , city). On click of these buttons , i am presenting another VC(using popover segue) , which is a search table to search country (or states or city). Now if user clicks two buttons , then both the view controller are presented at the same time. I want only one to be presented.How to do this?

Tried self.view.multipleTouchEnabled = NO; but not working. code of the searchVC:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIImage *bgApplication = [UIImage imageNamed:@"bg-app-568h.jpg"];
    self.view.backgroundColor = [UIColor colorWithPatternImage:bgApplication];

    self.searchItems = [self loadData];
    self.filteredSearchItems = [NSMutableArray arrayWithCapacity:[self.searchItems count]];

    for (UIView *view in self.SearchBarBase.subviews){
        if ([view isKindOfClass: [UITextField class]]) {
            UITextField *tf = (UITextField *)view;
            tf.delegate = self;
            break;
        }
    }
}

- (NSArray *)loadData
{
    MatchDayDataController * sharedController = [MatchDayDataController sharedDataController];
    NSArray *data = [sharedController fetchStates];
    //NSLog(@"states: %@", data);

    return data;
}

Code of the presenter VC:

-(void) viewWillAppear:(BOOL)animated
{
    keyboardIsShown = NO;

    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];

    // Load match venue data
    self.locationField.text = sharedController.matchVenue;

    //Load home team related data
    NSString *stateText = [sharedController.homeStateName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    if ([stateText length] == 0 )
    {
        self.selectHomeAssoc.enabled = NO;
        self.selectHomeClub.enabled = NO;
    }
    NSString *homeAssocText = [sharedController.homeAssociationName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    if ([homeAssocText length] == 0 )
    {
        self.selectHomeAssoc.enabled = YES;
        self.selectHomeClub.enabled = NO;
    }
    NSString *homeClubText = [self.homeClub.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    if ([homeClubText length] == 0 )
    {
        self.selectHomeClub.enabled = YES;
    }

    self.stateTextFieldHome.text = sharedController.homeStateName;
    self.homeAssociation.text = sharedController.homeAssociationName;
    self.homeClub.text = sharedController.homeClubName;;
    self.homeTeam.text = sharedController.homeTeamName;

    // Away team related data
    self.stateTextFieldAway.text = sharedController.awayStateName;
    self.awayAssociation.text = sharedController.awayAssocationName;
    self.awayClub.text = sharedController.awayClubName;
    self.awayTeam.text = sharedController.awayTeamName;
}

- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillShowNotification
                                                  object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillHideNotification
                                                  object:nil];

    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];

    sharedController.matchVenue = self.locationField.text;

    // Save Venue related data
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm"];
    NSString *dateTimeString = [self.dateField.text stringByAppendingString:@" "];

    dateTimeString = [dateTimeString stringByAppendingString:self.timeField.text];
    //NSLog(@"DateTimeString : %@", dateTimeString);
    NSDate *matchDateTime = [dateFormatter dateFromString:dateTimeString];
    sharedController.inspectionDate = matchDateTime;

    //Save Home team related data
    sharedController.homeTeamName = self.homeTeam.text;
    // Save away team related data
    sharedController.awayTeamName = self.awayTeam.text;
    [sharedController saveData];

    // hide the keyboard when we come back after leaving the cursor on text field.
    // I have called resignFirstResponder on homeTeam Text field. You can use any of text field to hide.
    [self.homeTeam resignFirstResponder];
    [self.awayTeam resignFirstResponder];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [self.view endEditing:YES];
    [super viewDidDisappear:animated];
}


// This event is called when the user clicks on Done/Next button in the key board.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)segue sender:(id)sender
{
    if (![sender isKindOfClass:[UIBarButtonItem class]]) {
        return true;
    }

    return [JLTValidator validateFields:@[self.locationField, self.dateField, self.timeField, self.homeTeam, self.homeClub, self.homeAssociation, self.stateTextFieldHome, self.stateTextFieldAway, self.awayAssociation, self.awayClub, self.awayTeam]];
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    //NSLog(@"segue.identifier : %@", segue.identifier);
    self.popSegue = (UIStoryboardPopoverSegue *)segue;
    if([segue.identifier isEqualToString:@"toSearchHomeStateFromButton"]
       || [segue.identifier isEqualToString:@"toSearchHomeStateFromText"] )
    {
        SearchHomeStateViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
    else if ([segue.identifier isEqualToString:@"toSearchHomeAssocFromButton"] || [segue.identifier isEqualToString:@"toSearchHomeAssocFromText"])
    {
        HomeAssocSearchViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
    else if ([segue.identifier isEqualToString:@"toSearchHomeClubFromButton"] || [segue.identifier isEqualToString:@"toSearchHomeClubFromText"])
    {
        SearchHomeClubViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
    else if([segue.identifier isEqualToString:@"toSearchAwayStateFromButton"] || [segue.identifier isEqualToString:@"toSearchAwayStateFromText"])
    {
        StateViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
    else if ([segue.identifier isEqualToString:@"toSearchAwayAssocFromButton"] || [segue.identifier isEqualToString:@"toSearchAwayAssocFromText"])
    {
        SearchAwayAssocViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
    else if ([segue.identifier isEqualToString:@"toSearchAwayClubFromButton"] || [segue.identifier isEqualToString:@"toSearchAwayClubFromText"])
    {
        SearchAwayClubViewController *viewController = segue.destinationViewController;
        viewController.delegate = (id) self;
    }
}

-(void) searchHomeStateDone:(NSString *)selectedState
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.stateAwayTeam = sharedController.stateHomeTeam;
    sharedController.homeTeamName = EMPTY_STRING;
    sharedController.awayStateName = sharedController.homeStateName;
    sharedController.awayAssocationName = EMPTY_STRING;
    sharedController.awayAssociationId = EMPTY_STRING;
    sharedController.awayClubName = EMPTY_STRING;
    sharedController.awayClubId = EMPTY_STRING;

    [self updateDataOnScreen];
    self.selectHomeAssoc.enabled = YES;
    self.selectHomeClub.enabled = NO;
    [self.popSegue.popoverController dismissPopoverAnimated:YES];
}

-(void) searchHomeAssocDone:(NSString *)selectedHomeAssoc
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.awayAssocationName = sharedController.homeAssociationName;
    sharedController.homeTeamName = EMPTY_STRING;
    sharedController.awayStateName = sharedController.homeStateName;
    sharedController.awayAssociationId = sharedController.homeAssociationId;
    sharedController.awayClubName = EMPTY_STRING;
    sharedController.awayClubId = EMPTY_STRING;

    [self updateDataOnScreen];
    self.selectHomeClub.enabled = YES;
    [JLTValidator clearTextFieldValidation:self.homeAssociation];
    [self.popSegue.popoverController dismissPopoverAnimated:YES];
}

-(void) searchHomeClubDone:(NSString *)selectedHomeClub
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.homeTeamName = EMPTY_STRING;

    [self updateDataOnScreen];
    [JLTValidator clearTextFieldValidation:self.homeClub];
    [self.popSegue.popoverController dismissPopoverAnimated:YES];

}

-(void) searchAwayStateDone:(NSString *)selectedAwayState
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.homeTeamName = self.homeTeam.text;

    [self updateDataOnScreen];
    [JLTValidator clearTextFieldValidation:self.stateTextFieldAway];
    [self.popSegue.popoverController dismissPopoverAnimated:YES];
}

-(void) searchAwayAssocDone:(NSString *)selectedAwayAssoc
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.homeTeamName = self.homeTeam.text;

    [self updateDataOnScreen];
    [JLTValidator clearTextFieldValidation:_awayAssociation];
    [self.popSegue.popoverController dismissPopoverAnimated:YES];
}

-(void) searchAwayClubDone:(NSString *) selectedAwayClub;
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];
    sharedController.homeTeamName = self.homeTeam.text;

    [self updateDataOnScreen];
    [JLTValidator clearTextFieldValidation:_awayClub];
    [self.popSegue.popoverController dismissPopoverAnimated:YES];
}

-(void) updateDataOnScreen
{
    MatchDayDataController *sharedController = [MatchDayDataController sharedDataController];

   // sharedController.awayTeamName = EMPTY_STRING;

    self.stateTextFieldHome.text = sharedController.homeStateName;
    self.homeAssociation.text =sharedController.homeAssociationName;
    self.homeClub.text = sharedController.homeClubName;
    self.homeTeam.text = sharedController.homeTeamName;
    self.stateTextFieldAway.text = sharedController.awayStateName;
    self.awayAssociation.text = sharedController.awayAssocationName;
    self.awayClub.text = sharedController.awayClubName;
    //self.awayTeam.text = sharedController.awayTeamName;
}

Any ideas ?

Thanks,

You can create static bool variable busy , and at first line of each button action method check out state of this variable. If busy equal to NO , then set her to YES and at last line of action method or somewhere else set her to NO. If busy equal to YES do return from action method. So, until first called method didn't finish no other methods will be running.

@implementation yourController 

-(void)changeCountry
{
    if (!busy)
    {
        busy = YES;
        // do what you need
    } else return;
}

-(void)changeState
{
    if (!busy)
    {
        busy = YES;
        // do what you need
    } else return;
}

@end

You should implement singleton, which return a static instance with BOOL value for using him in difference viewControllers (1 mainC + 3 popOverC) and set busy to NO when you finish edition.

尝试self.view.exclusiveTouch = YES;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM