Domanda

E 'possibile cambiare l'iphone applicazione tipo di contatto di schermo per avere la barra di ricerca rimanendo sulla parte superiore sempre? se sì come?

È stato utile?

Soluzione

ho scoperto il modo per farlo.

qui è

  1. tirare la visualizzazione della tabella per una vista separata
  2. posizionare la barra di ricerca prima e poi la vista tabella nella nuova vista separata
  3. creare un'IBOutlet per la vista tavolo e collegare lo stesso.
  4. apportare le modifiche appropriate per Tableview delegato.
  5. Cambia i measurments del UITableView aggiunto alla nuova Tableview.

Altri suggerimenti

Lo so che è una vecchia questione, ma ho trovato una soluzione per questo, che funziona con il classico UITableViewController e UTSearchDisplayController.

Ho creato una vista contenitore per il 1 ° Searchbar poi mettere la barra di ricerca al suo interno. Il contenitore non deve fermare alla limiti. Dopo questo è possibile modificare la posizione della barra di ricerca rispetto al contenitore. Un problema con questo che in questo modo la barra di ricerca non gestisce le interazioni degli utenti. Quindi abbiamo bisogno di usare il nostro contenitore che scarica gli eventi qui di seguito la sua vera struttura.

La nostra classe contenitore:

@interface _SearchContainerView : UIView
@end

@implementation _SearchContainerView
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    if (self.subviews.count > 0) {
        UISearchBar *searchBar = (UISearchBar *) self.subviews[0];
        CGRect f = searchBar.frame;
        f = CGRectMake(0, 0, f.size.width, f.origin.y + f.size.height);
        if (CGRectContainsPoint(f, point)) return YES;
    }
    return [super pointInside:point withEvent:event];
}
@end

Se si crea la barra di ricerca di programmazione è possibile impostare il presente con un seguito come codice:

- (void)setSearchEnabled:(BOOL)searchEnabled {
    if (searchBar == nil && searchEnabled) {
        searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, 44)];
        searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar
                                                                contentsController:self];
        searchBar.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin
                                     | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
        searchDisplayController.delegate = self;
        searchDisplayController.searchResultsDataSource = self;

        searchContainer = [[_SearchContainerView alloc] initWithFrame:searchBar.frame];
        [container addSubview:searchBar];
        container.clipsToBounds = NO;

        self.tableView.tableHeaderView = container;

    }  else {
        [searchBar removeFromSuperview];
        self.tableView.tableHeaderView = nil;
        searchBar = nil;
        searchDisplayController = nil;
        searchContainer = nil;
    }
}

Quindi è possibile modificare la posizione in base alla posizione di scorrimento del tableView:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (searchBar == nil || searchDisplayController.isActive) return;
    CGRect b = self.tableView.bounds;
    // Position the searchbar to the top of the tableview
    searchBar.frame = CGRectMake(0, b.origin.y, b.size.width, 44);
}

E l'ultima parte è quello di ripristinare tutto dopo la ricerca:

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
    // Restore header alpha
    searchContainer.alpha = 1.0;
    // Place the searchbar back to the tableview
    [searchBar removeFromSuperview];
    [searchContainer addSubview:searchBar];
    // Refresh position and redraw
    CGPoint co = self.tableView.contentOffset;
    [self.tableView setContentOffset:CGPointZero animated:NO];
    [self.tableView setContentOffset:co animated:NO];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top