我有一个带有4个示波器按钮的UISearchBar。我需要存储按下的范围按钮在下一次当用户选择另一个时,在目标C中,有什么想法吗?
解决方案:这是给其他人的解决方案
static NSString *yourKey = @"savedScopeSelection";
viewDidLoad
- (void)viewDidLoad
{
NSInteger newIndex = [[NSUserDefaults standardUserDefaults] integerForKey:yourKey];
[self.searchDisplayController.searchBar setSelectedScopeButtonIndex:newIndex];
}
UISearchBar作用域
- (void)searchForText:(NSString *)searchText scope:(UYLWorldFactsSearchScope)scopeOption
{
if (self.managedObjectContext)
{
NSString *predicateFormat = @"%K contains[cd] %@";
NSString *searchAttribute = @"option0";
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:yourKey];
if (scopeOption == searchScopeOption1)
{
searchAttribute = @"option1";
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:yourKey];
}
if (scopeOption == searchScopeOption2)
{
searchAttribute = @"option2";
[[NSUserDefaults standardUserDefaults] setInteger:2 forKey:yourKey];
}
if (scopeOption == searchScopeOption3)
{
searchAttribute = @"option3";
[[NSUserDefaults standardUserDefaults] setInteger:3 forKey:yourKey];
}
if (scopeOption == searchScopeOption4)
{
searchAttribute = @"option4";
[[NSUserDefaults standardUserDefaults] setInteger:4 forKey:yourKey];
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchAttribute, searchText];
[self.searchFetchRequest setPredicate:predicate];
NSError *error = nil;
self.filteredList = [self.managedObjectContext executeFetchRequest:self.searchFetchRequest error:&error];
if (error)
{
NSLog(@"searchFetchRequest failed: %@",[error localizedDescription]);
}
}
}
发布于 2018-08-07 07:16:46
现在似乎是使用NSUserDefaults的好时机。
在某处设置静态密钥
static NSString *yourKey = @"savedScopeSelection";
进行选择时,存储所选索引的值:
[[NSUserDefaults standardUserDefaults] setInteger:newIndexValue forKey:yourKey];
初始化搜索栏时,查看默认值以获取存储的索引:
NSInteger *newIndex = [[NSUserDefaults standardUserDefaults] integerForKey:yourKey];
我建议你用一个整数来表示每个范围按钮。您可以使用如下的枚举:
enum ScopeButtonIndex: Int {
case thisScope = 1
case thatScope = 2
case otherScope = 3
case fourthScope = 4
}
我特别喜欢给它一个索引,因为我将它存储在userDefaults中,并且我不想在将来的某个版本中通过添加另一个值而意外地更改索引值
https://stackoverflow.com/questions/51713157
复制相似问题