如何单次触发UISearchBar委托?

时间:2015-08-13 10:47:42

标签: ios objective-c uisearchbar

当用户在 uisearchbar 中键入文本时,我正在过滤数组,但问题是我有一个警报处理程序,每次调用委托时都会触发,但我希望警报来只有一次没有多次......代码在

之下
<div id="deletePanel" style="display: none">Delete selected</div>

2 个答案:

答案 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];

}