Ändern Rahmen von UISearchBar programmgesteuert, wenn die Orientierung ändert

Habe ich eine Schaltfläche "suchen" und wenn der Benutzer darauf klickt, ich bin anzeigen UISearchBar programmgesteuert. Die Breite der Suchleiste ist (200) nicht Vollbild. Ich bin auf der Suche, wie ein MSWord und die Anzeige der Inhalte in der Suchleiste' tableview. Aber wenn der Benutzer ist in der Mitte der such-und verändert die Orientierung, wie sollte ich die search bar Breite, D. H., selbst.searchDisplayController.Suchleiste.Rahmen und selbst.searchDisplayController.searchResultsTableView.frame.

Unten ist der code, der zum erstellen der Suchleiste:

-(IBAction)searchBar:(id)sender
{
    if(!searching)
    {
        searching = YES;
        sBar.frame = CGRectMake(500, 50,250, 44);
        [self.view addSubview:sBar];
        [searchController setActive:YES animated:YES];
        [sBar becomeFirstResponder];

        if((currentOrientation == UIInterfaceOrientationLandscapeLeft)  || 
           (currentOrientation ==  UIInterfaceOrientationLandscapeRight))
        {
            self.searchDisplayController.searchBar.frame = CGRectMake(755, 50, 250, 44);
        }
        else 
        {
            self.searchDisplayController.searchBar.frame = CGRectMake(500, 50, 250, 44);
        }
    }
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    [self filterContentForSearchText:searchString scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    //Return YES to cause the search result table view to be reloaded.
    return YES;
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:
     [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];

    //Return YES to cause the search result table view to be reloaded.
    return YES;
}

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller{
    /*
     Bob: Because the searchResultsTableView will be released and allocated automatically, so each time we start to begin search, we set its delegate here.
     */
    [self.searchDisplayController.searchResultsTableView setDelegate:self];
    [self.searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor colorWithRed:1 green:1 blue:204/255.0 alpha:1.0]];
}

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
    /*
     Hide the search bar
     */

    float animateTime = 0.3;
    CGRect viewFrame = sBar.frame;
    viewFrame.origin.y -= (viewFrame.size.height);

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animateTime];

    sBar.frame = viewFrame;

    [UIView commitAnimations];
    [self performSelector:@selector(animationDone) withObject:nil afterDelay:0.3];

}

-(void)animationDone
{
    [sBar removeFromSuperview];
    searching = NO;
}


-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
{
    if((currentOrientation == UIInterfaceOrientationLandscapeLeft)  || 
       (currentOrientation ==  UIInterfaceOrientationLandscapeRight))
    {
        tableView.frame = CGRectMake(755, 100, 250, 400);
    }
    else 
    {
        tableView.frame = CGRectMake(500, 100, 250, 400);
    }
}



- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    currentOrientation = toInterfaceOrientation;



    if((currentOrientation == UIInterfaceOrientationLandscapeLeft)  || 
       (currentOrientation ==  UIInterfaceOrientationLandscapeRight))
    {

        //Search
        btnSearch.frame = CGRectMake(920, 5, 40, 40);

        self.searchDisplayController.searchBar.frame = CGRectMake(755, 50, 250, 44);
        self.searchDisplayController.searchResultsTableView.frame = CGRectMake(755, 100, 250, 400);
    }
    else 
    {

        //Search
        btnSearch.frame = CGRectMake(666, 5, 40, 40);

        self.searchDisplayController.searchBar.frame = CGRectMake(500, 50, 250, 44);
        self.searchDisplayController.searchResultsTableView.frame = CGRectMake(500, 100, 250, 400);
    }
}

Ich bin in der Lage zu erstellen und die Funktionalität, die ist in Ordnung. Aber einzige Problem ist, wenn der Benutzer die änderung der orinentation seine nicht ordnungsgemäß Suchleiste' Breite.
Meine Anwendung muss geliefert werden an diesem Freitag. Bitte genau richtig mich so schnell wie möglich.

InformationsquelleAutor Srivathsa | 2012-09-27
Schreibe einen Kommentar