我想完成这个:
考虑在其标题上带有搜索栏的表格视图.每当搜索字符串时,都会刷新表格视图.
我有2节课
TableViewController(UIViewController子类)
包含UITableView - 显示其表格
从Header类(UIToolBar子类)加载表的标题视图
.
Header(UITableView的标题)
- 包含UISearchBar及其委托
该
UISearchBarDelegates在TableViewController中回调函数
那叫
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
Run Code Online (Sandbox Code Playgroud)
这会导致App崩溃
的函数调用栈帧是如下
[UITableView reloadSections:withRowAnimation:]
[TableViewController functionThatCallsReloadSection]
[Header searchBarSearchButtonClicked:]
Run Code Online (Sandbox Code Playgroud)
reloadSection导致应用程序崩溃.任何想法为什么会这样发生?
是因为在重新加载表视图头时,委托函数仍然在堆栈上处于活动状态?
我没有改变任何与tableview相关的事情(行数或部分数没有变化).我想做的就是重新加载表视图.
编辑:我试图在iPad上做所有这些事情,它提供了一个popover同时使用UISearchDisplayController,我不想使用.我已经有一个表格视图,我想刷新一旦输入文本和搜索按钮被击中,使用搜索代表.唯一的问题是,一旦我在UISearchBar的搜索委托中调用[UITableView reloadSection:](UISearchBar位于我想要重新加载的UITableView的标题上),应用程序崩溃了.
我正在我的应用程序的导航栏中创建一个UISearchBar选项.我的应用包含多个视图和子视图.我有这个主视图,其他3个观点.其中一个是空的(现在),另外两个有关于它们的表格视图.
当我正在进行实际搜索或者在uisearchbar外触摸/点击时,我希望我的键盘能够在我搜索和隐藏时显示.我根据需要使用searchbardelegate.
我可以通过以下方式使用[searchBar resignFirstResponder]隐藏键盘.
当我触摸屏幕的空白部分时
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
if ([mySearchBar isFirstResponder] && [touch view] != mySearchBar) {
[mySearchBar resignFirstResponder];
}
[super touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)我似乎无法做的是让它回应我的2个表格中的一个.或者当我重新填充主视图以包含完全不同的东西时.
我曾尝试更改touchesbegan方法以在触摸tableviews时重新调整搜索栏,但它到目前为止还没有工作.
亲爱的朋友先生,我已经尝试了其他几件事.谷歌,但这似乎是我需要的其他东西.
任何人都有任何想法,我可以做些什么来解决这个问题?
编辑:看来这样,当使用断点时,touchesbegan-method会响应backgroundview但当我触摸其中一个tableviews或导航栏(包含uisearchbar)时它不会响应.
我有一个简单的视图控制器的UISearchBar和uitable.我的问题是,当点击搜索栏时,我看到委托函数searchBarShouldBeginEditing被调用但不是searchBarTextDidBeginEditing(并且因为该键盘未打开且搜索不可编辑)
我试图实现委托函数searchBarShouldBeginEditing 返回YES,将searchbar设置为第一响应者,但是我没办法调用searchBarTextDidBeginEditing ...
知道会发生什么事吗?
一些代码:
或者Controller.h
@interface ViewController : UIViewController <UISearchBarDelegate>
{
UISearchBar * searchbar;
}
@property (nonatomic, retain) IBOutlet UISearchBar* searchbar;
@end
Run Code Online (Sandbox Code Playgroud)
Controller.m或者
@synthesize searchbar;
- (BOOL)respondsToSelector:(SEL)sel {
NSLog(@"Queried about %@", NSStringFromSelector(sel));
return [super respondsToSelector:sel];
}
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
NSLog(@"searchBarShouldBeginEditing -Are we getting here??");
return YES;
}
-(void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
NSLog(@"searchBarTextDidBeginEditing -Are we getting here??");
}
Run Code Online (Sandbox Code Playgroud)
我的班级有很多代码(这肯定会影响搜索栏)但是如果有人遇到类似搜索栏的问题,那么它的响应就会非常苛刻;)
我试着只使用搜索栏进行简单的应用程序,显然它有效...
编辑:
测试了一下我发现它与uisearchbar没有关系,因为我添加了一个TextField得到相同的结果(只是调用了textFieldShouldStartEditing委托函数)
应用程序在UITabBar cotroller中有所有视图控制器,但我认为这不会导致所有这些混乱......
EDITING2:
真奇怪的行为:将IBAction函数设置为UITextfield的TouchDown事件可以很好地工作,但将IBAction函数设置为EditingDidBegin永远不会被触发... …
我们在表格标题中有一个搜索栏.当用户在iOS 7上快速点击两次时,它会消失.有没有人有任何建议我们做错了什么?
uisearchbar uisearchbardelegate uisearchbardisplaycontrol ios7
当我添加my searchBaras headerView时tableView,所有委托方法都按预期触发.
self.myTableView.tableHeaderView = self.searchController.searchBar;但是如果我从StoryBoard中获取searchBar IBOutlet并将其分配给self.searchController.searchBar,那么委托方法不会被触发!
_mySearchBar = self.searchController.searchBar;我也尝试将其嵌入mySearchBar到视图中然后分配:
_mySearchBarView = self.searchController.searchBar;
但没有成功! 难道我做错了什么
有没有办法在更改fetchedResultsControllers NSpredicate(并执行提取)后更新UITableView节和行?我想在我的searchBar中的searchText发生更改时使用controllerWillChangeContent委托方法来更新我的表.
目前在我的应用程序中,只有在coredata发生更改时才会调用这些委托方法.不是在更改resultsController谓词和执行提取时.
如果我只是调用[ self.tableView reloadData]在每个文本更改上,没有动画,它会阻止体验.
或者我应该做一些完全不同的事情来更新每个搜索文本条目更改的tableView内容?
iphone nspredicate nsfetchedresultscontroller uisearchbardelegate
我研究过这个问题.看起来这是一个常见的问题,但我尝试过的任何工作都没有.我对iPhone应用程序开发和目标C都很陌生.此时我想要做的就是在搜索栏字段中输入一个字符串,并在点击键盘上的搜索按钮时返回NSLog()中的值.
我的头文件如下所示:
@interface ListingMapViewController : UIViewController <UISearchBarDelegate>
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
@end
Run Code Online (Sandbox Code Playgroud)
我在我的班级文件中有这个:
#import "ListingMapViewController.h"
@interface ListingMapViewController ()
@end
@implementation ListingMapViewController
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
searchBar.delegate =self;
[self handleSearch:searchBar];
NSLog(@"User searched for %@", searchBar.text);
}
@end
Run Code Online (Sandbox Code Playgroud)
当我单击"搜索"按钮时没有输出.我错过了什么?谢谢.
我希望这是一个简单的问题.

我有一个显示取消按钮的搜索栏:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
[searchBar setShowsCancelButton:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是取消按钮上的文字没有显示.

按钮显然是因为我可以点击它,但显示按钮时没有文字出现.它好像按钮是不可见的.代码在iOS6中运行良好但现在在iOS7中我遇到了这个问题.有什么想法?我正在使用UISplitViewController,我的搜索栏位于MasterViewController的navigationItem.titleView中.
我一直试图找到解决方案几个小时,但没有骰子...我一直在尝试纯粹以编程方式实现UISearchBar(没有xib,没有接口构建器).
这是我的.h标题:
@interface RLCASearchMasterViewController : UIViewController<UISearchBarDelegate>
@property (strong, nonatomic) RLCAGUIElements *gui;
@property (strong, nonatomic) RLCAUITableView *table;
@property (strong, nonatomic) UISearchBar *searchBar;
@end
Run Code Online (Sandbox Code Playgroud)
和我的.m实施:
@synthesize searchBar;
- (void)loadView
{
[super loadView];
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, searchBar.frame.size.height)];
searchBar.delegate = self;
[self.view addSubview:searchBar];
}
Run Code Online (Sandbox Code Playgroud)
我已经过了这个我不知道多少次,并且不知道我做错了什么... UISearchBar被添加到视图中,具有正确的大小和所有,但是当点击/点击时,键盘没有出现.如果我唤起以下内容:
[searchBar becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)
键盘确实显示,所以它可能不是委托,但实际上检测它是否被点击...我不希望它在加载时编辑,并且只能通过请求...
请帮忙.谢谢!:)
真诚的,彼得.
我有UISearchDisplayController页面视图如下(原始状态)

点击搜索栏并输入一些搜索词后,我会在表格中找到结果列表

单击表中的条目后,将在堆栈顶部显示新的viewController

我的意图是单击取消按钮(左上角),根视图将显示searchDisplay控制器的原始状态

这就是我尝试过的
在我的取消方法中(当我点击左上方的取消按钮时触发)
- (void)cancel
{
[self dismissViewControllerAnimated:YES completion:NULL];
[self searchBarCancelButtonClicked:self.searchDisplayController.searchBar];
}
Run Code Online (Sandbox Code Playgroud)
在searchbar委托方法中我做到了这一点
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
self.searchBar.showsCancelButton = NO;
[self.searchBar resignFirstResponder];
self.searchBar.text = @"";
searchDisplayController.searchResultsTableView.hidden = YES;
[self searchDisplayControllerWillEndSearch:self.searchDisplayController];
}
Run Code Online (Sandbox Code Playgroud)
点击取消按钮后,我设法实现的就是这个

原始的tableview似乎缺失(仅当我点击页面时才会出现)
如何修改我的方法以将搜索恢复到其原始状态?
uisearchbar ×8
objective-c ×4
ios ×3
ios7 ×2
iphone ×2
cocoa-touch ×1
nspredicate ×1
reloaddata ×1
uitableview ×1