J'ai essayé d'ajouter UISegmentedControl
au bas de UINavigationBar
avec le titre. Mais je ne peux pas l'ajouter et je ne peux pas ajouter UISegmentedControl
dans le tableView.headerView
, car j'ai besoin de la barre de recherche dans le tableView.headerView
, il n'y a donc qu'une solution pour laquelle j'ai besoin d'ajouter UISegmentedControl
au bas de UINavigationBar
. Quelqu'un a une autre idée que je peux résoudre cette situation?
Voici le code que j'ai essayé (avec Swift ):
class searchingViewController: UITableViewController{
override func viewDidLoad() {
var items: [AnyObject] = ["Searching Method A", "Searching Method B"]
var searchSC:UISegmentedControl!
searchSC.frame = CGRectMake(0, 0, frame.width - 20, 30)
searchSC.selectedSegmentIndex = 1
searchSC.backgroundColor = UIColor(white: 1, alpha: 1)
searchSC.layer.cornerRadius = 5.0
navigateUIToolBar = UIToolbar(frame: CGRectMake(frame.minX + 10, ios7_8Info.getStatusBarHeight()+self.navigationController!.navigationBar.frame.height+frame.minY+(21/2),
frame.width - 20, 30))
navigateUIToolBar.addSubview(searchSC)
self.navigationController?.navigationBar.addSubview(navigateUIToolBar)
}
}
Pour le mettre dans la barre de navigation, vous avez une vue à gauche et un titre pour de telles choses ... accessibles via ....
self.navigationItem.titleView = mySegmentedControl
pour référence future....
self.navigationItem.rightBarButtonItem
self.navigationItem.leftBarButtonItems // for adding an Array of items
Pour l'ajouter au-dessous de la vue de navigation mais en l'avoir statique, ajoutez-le à viewController.view ... Utilisez-vous un UITableViewController? Si c'est le cas, passez peut-être à un UIViewController et ajoutez une tableView, puis votre vue toolbar en tant que sous-vues à cette self.view.
Pour ajouter le contrôle de segment dans UINavigationBar dans Swift 4
let segment: UISegmentedControl = UISegmentedControl(items: ["First", "Second"])
segment.sizeToFit()
segment.tintColor = UIColor(red:0.99, green:0.00, blue:0.25, alpha:1.00)
segment.selectedSegmentIndex = 0;
segment.setTitleTextAttributes([NSAttributedStringKey.font : UIFont(name: "ProximaNova-Light", size: 15)!], for: .normal)
self.navigationItem.titleView = segment
Je pense que vous cherchez ceci.
let searchVC = self.storyboard?.instantiateViewController(withIdentifier:"idofcontroller")
let searchController = UISearchController(searchResultsController: searchVC)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search"
navigationItem.searchController = searchController
definesPresentationContext = true
searchController.searchBar.scopeButtonTitles = ["News", "Photos", "Videos"]
searchController.searchBar.delegate = self
Voici comment je le fais dans l'Objectif C (désolé, je n'ai pas encore appris Swift):
- (void)viewDidLoad
{
[super viewDidLoad];
self.viewControllers = [self segmentViewControllers];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems: [self.segmentedControl addTarget: self
action: @selector(segmentClicked:)
forControlEvents: UIControlEventValueChanged];
CGFloat topOffset = self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height;
self.toolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0, topOffset, self.navigationController.navigationBar.frame.size.width, kDefaultViewHeight)];
self.toolbar.delegate = self;
self.navigationController.navigationBar.backgroundColor = [UIColor whiteColor];
self.toolbar.backgroundColor = [UIColor whiteColor];
self.toolbar.clipsToBounds = YES;
UIBarButtonItem *segmentedControlItem = [[UIBarButtonItem alloc] initWithCustomView: self.segmentedControl];
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace
target: nil
action: nil];
[self.toolbar setItems: @[flexibleItem, segmentedControlItem, flexibleItem] animated: YES];
[self.navigationController.view addSubview: self.toolbar];
self.segmentedControl.selectedSegmentIndex = 0;
}
Et dans UITableViewController (l'un des segmentViewControllers):
self.tableView.contentInset = UIEdgeInsetsMake(topOffset, 0, 0, 0);
CGRect currentFrame = self.tableView.frame;
[self.tableView setFrame: CGRectMake(currentFrame.Origin.x,
currentFrame.Origin.y,
currentFrame.size.width,
currentFrame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height)];
Vous pouvez également ajouter le contrôle de segment à une barre de recherche, pas à l'élément de navigation. Si vous êtes comme moi, il me fallait un grand titre + une barre de recherche + un élément de navigation, ce qui serait impossible avec la première réponse actuelle.
La réponse de @Abhishek est proche. Vous feriez quelque chose comme ce qui suit:
// Create the search controller
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.scopeButtonTitles = ["Option 1", "Option 2"]
// Make sure the scope bar is always showing, even when not actively searching
searchController.searchBar.showsScopeBar = true
// Make sure the search bar is showing, even when scrolling
navigationItem.hidesSearchBarWhenScrolling = false
// Add the search controller to the nav item
navigationItem.searchController = searchController
definesPresentationContext = true
@Gurjit Singh, la ligne avec .showsScopeBar = true
est la solution à votre problème.
vous pouvez personnaliser le titleView de navigationItem, comme ceci:
self.navigationItem.titleView = segmentview
vous ne devez pas ajouter de sous-vue à la barre de navigation, car après le Push ou le pop-up UIViewcontroller, la sous-vue est toujours affichée dans la barre de navigation.