如何在Apple的日历应用程序中显示/隐藏导航栏(iOS 7)中的搜索栏?

时间:2014-02-13 12:50:38

标签: ios iphone objective-c search navigationbar

我想使用导航栏中的搜索栏按钮来显示与日历应用中的Apple一样的搜索栏。取消按钮将关闭搜索栏并将导航栏返回到其以前的状态,栏按钮,标题等。

使用iOS 7属性:

self.searchDisplayController.displaysSearchBarInNavigationBar = YES;

将搜索栏放入导航栏就好了。我的问题是试图通过按下条形按钮有条件地显示它。我已尝试从我的按钮动作中触发此行,但没有去。我在searchDisplayController上尝试过setActive:Animated:

self.searchDisplayController.active = YES;

但也没有运气。任何想法或帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我不确定您是否注意到,但是当您按下搜索图标时,在Apple的日历应用程序中,它会打开一个带搜索栏的新UITableView。如果这是你想要做的,你将创建一个带有UITableView的UIViewController和一个UISearchBar,在tableView中你将过滤内容。

如果我是你,我会隐藏UISearchBar并在需要的时候通过按钮显示它。

这可能也有效。试试吧,让我知道:

在你的viewWillAppear中:

- (void)viewWillAppear:(BOOL)animated {

// scroll search bar out of sight
CGRect newBounds = self.tableView.bounds;
if (self.tableView.bounds.origin.y < 44) {
    newBounds.origin.y = newBounds.origin.y + self.searchBar.bounds.size.height;
    self.tableView.bounds = newBounds;
}
// new for iOS 7
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:0 animated:YES];}

现在已隐藏,请在搜索完成后再调用它以隐藏它:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [self viewWillAppear:YES];
}

并用按钮显示searchBar,然后:

- (IBAction)displaySearchBar:(id)sender {
    // makes the search bar visible
    [self.searchBar becomeFirstResponder];
}

答案 1 :(得分:2)

在iOS 8中,您只需提供<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <div id="changeText">Zero</div> <script type="text/javascript"> var text = ["One", "Two", "Three"]; var counter = 0; var elem = document.getElementById("changeText"); $(document).ready(function(){ change()}); function change() { $("#changeText").fadeToggle(3000, 'swing', function(){ if($("#changeText").css("display") == "none") { elem.innerHTML = text[counter]; counter++; if(counter >= text.length) { counter = 0; } } change(); }); } </script> 即可获得与Calendar.app相同的动画。查看Apple的UICatalog示例代码以获取示例。