当用户在 uisearchbar 中键入文本时,我正在过滤数组,但问题是我有一个警报处理程序,每次调用委托时都会触发,但我希望警报来只有一次没有多次......代码在
之下<div id="deletePanel" style="display: none">Delete selected</div>
答案 0 :(得分:2)
每次调用委托方法时,使用NSPostWhenIdle
向自己发布通知,优先级为const NSString *myNotificationName = @"kMyNotificationName";
(例如)和合并掩码。这将合并这些通知并在系统空闲时触发它们,在这种情况下,让您在用户不直接输入时工作。
在您的实施文件中:
viewWillAppear
在[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleSearchFieldUpdate:)
name:myNotificationName object:self];
或类似的地方:
[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:myNotificationName object:self]
postingStyle:NSPostWhenIdle
coalesceMask:NSNotificationCoalescingOnName
forModes:nil];
在委托方法中:
- (void)handleSearchFieldUpdate:(NSNotification *)notification {
.. do your work ..
}
作为一种新的类方法:
handleSearchFieldUpdate
最终结果是每次用户停止输入时都会调用您的选择器%p
。
答案 1 :(得分:0)
为什么没有布尔变量来确定之前是否显示过警报?
@interface ViewController() { //extension in .m file
BOOL noResultsAlertShown;
}
然后
if (self.filteredTableData.count == 0 && !noResultsAlertShown) {
noResultsAlertShown = YES;
[[CLAlertHandler standardAlertHandler]showAlert:@"No match found!" title:AppName];
[self.searchTableView reloadData];
}