2015-07-04 48 views
2

所以我有上有一个“后退”按钮,导航栏和一个UISearchBar了这条正确的:隐藏/显示后退按钮上的导航栏时,搜索栏打开/关闭

[输入图像描述这里] [1]

当的UISearchBar打开/节目,取消按钮隐藏/显示:

[在这里输入的形象描述] [2]

中的UISearchBar打开时,我要的是,我希望它基本上“覆盖”后退按钮。当它关闭时,我想让它“揭开”后退按钮。这是我到目前为止的代码:

#import "SearchViewController.h" 

@interface SearchViewController() 

@end 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
     self.edgesForExtendedLayout = UIRectEdgeNone; 

    UISearchBar *searchBar = [UISearchBar new]; 
    searchBar.showsCancelButton = NO; 
    [searchBar sizeToFit]; 
    searchBar.delegate = self; 

    self.navigationItem.titleView = searchBar; 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:nil]; 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 


- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [searchBar setShowsCancelButton:YES animated:YES]; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    [searchBar setShowsCancelButton:NO animated:YES]; 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    [searchBar resignFirstResponder]; 
    [searchBar setShowsCancelButton:NO animated:YES]; 
} 

@end 

我已经尝试了做:在searchBarTextDidBeginEditing/searchBarTextDidEndEditing self.navigationItem.hidesBackButton = NO/YES;但离开那个地方后退按钮是空的!

[输入图像描述这里] [3]

有没有一种方法可以让搜索栏扩展到后退按钮?谢谢!

回答

4

尝试通过

self.navigationItem.leftBarButtonItem=nil; 
self.navigationItem.hidesBackButton=YES; 

self.navigationItem.backBarButtonItem=nil; 

更新代码来做到这一点:

@interface SearchViewController() 
{ 
    UIBarButtonItem *backButtonItem; 
    UIBarButtonItem *negativeSpacer; 
} 
@end 

@implementation SearchViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    UISearchBar *searchBar = [UISearchBar new]; 
    searchBar.showsCancelButton = NO; 
    [searchBar sizeToFit]; 
    searchBar.delegate = self; 

    self.navigationItem.titleView = searchBar; 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:nil]; 

    self.navigationItem.backBarButtonItem=nil; 
    self.navigationItem.hidesBackButton=YES; 

    UIButton *backButton = [[UIButton alloc] initWithFrame: CGRectMake(0, 0, 70.0f, 21.0f)]; 
    UIImage *backImage = [UIImage imageNamed:@"Back.png"]; 
    [backButton setImage:backImage forState:UIControlStateNormal]; 
    [backButton setTitleEdgeInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 0.0)]; 
    [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
    [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

    negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
    [negativeSpacer setWidth:-15]; 

    self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpacer,backButtonItem,nil]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [searchBar setShowsCancelButton:YES animated:YES]; 
    self.navigationItem.leftBarButtonItems = nil; 
} 

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    [searchBar setShowsCancelButton:NO animated:YES]; 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    [searchBar resignFirstResponder]; 
    [searchBar setShowsCancelButton:NO animated:YES]; 
    self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpacer,backButtonItem,nil]; 
} 
- (IBAction)backButtonPressed:(id)sender{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

这并没有帮助我的情况。但是,我靠得更近,但是当我重新显示后退按钮时,箭头丢失。你能帮助我吗?我已更新我的问题 – user1282637

+0

谢谢,我会尽快尝试 – user1282637