如何在 ios 的 UIPickerview 上添加搜索选项?
How can I add search option on UIPickerview in ios?
我在我的项目中使用 UIActionsheet uipickerview。这里,我是根据他的id传值。
我的意思是,在 uipickerview 列表中它会显示名称,并且在通过后它会获取它的 id。
所以,5-10 个值没问题,但假设我有超过 100 个值及其 ID,那么滚动、查找和 select 一个值会花费很多时间。
所以,我想在其中添加搜索选项。因此,在单击我的文本字段后,选择器或弹出窗口将会出现。它首先显示一些列表,以及那里可用的搜索选项,因此用户可以键入任何一个或两个单词,因此根据其单词数据将根据单词出现(自动搜索完成)。
我该如何实现。
如果有人想要 swift...
创建一个名为 txtSearch 的文本字段,然后在 ViewDidload 中添加以下两行
self.txtSearch.delegate=self
self.txtSearch.addTarget(self, action: #selector(self.textFieldValueChanged(TextField:)), for: UIControlEvents.editingChanged)
func textFieldValueChanged(TextField:UITextField)
{
if((TextField.text?.characters.count)!>0)
{
self.filteredArray = (self.searchInArray(srchArray: self.ArraywithFullData, withKey: "key value", Characters: TextField.text!))!
}
else
{
self.filteredArray = self.ArraywithFullData.mutableCopy() as! NSMutableArray
}
self.pickerView.reloadData()
}
func searchInArray(srchArray:NSMutableArray, withKey:String,Characters:String)->NSMutableArray
{
let resultArray=NSMutableArray()
for index in 0..<srchArray.count
{
let Dict = srchArray[index] as! [String:Any]
if let stringmatcher = Dict[withKey] as? String
{
if(stringmatcher.contains(find: Characters))
{
resultArray.add(Dict)
}
else
{
}
}
}
return resultArray
}
extension String {
func contains(find: String) -> Bool{
return self.range(of: find) != nil
}
而对于 Objective-C 你必须做如下的事情。但不要忘记调用 textField Delegates。
NSMutableArray *filteredArray;
NSMutableArray *ArraywithFullData;
self.txtSearch.delegate=self
[self.txtSearch addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
//
-(void)textFieldValueChanged:(UITextField *)TextField
{
if((TextField.text.length)>0)
{
filteredArray = [self searchInArray:ArraywithFullData withKey:@"key value" andCharacters:TextField.text];
}
else
{
filteredArray = [ArraywithFullData mutableCopy];
}
[self.pickerView reloadData];
}
-(NSMutableArray *)searchInArray:(NSMutableArray*)srchArray withKey:(NSString *)key andCharacters:(NSString *)charecters
{
NSMutableArray *resultArray= [[NSMutableArray alloc]init];
for (int index=0 ; index<srchArray.count; index++)
{
NSMutableDictionary *Dict = srchArray[index];
if ([Dict valueForKey:key] != nil)
{
NSString * stringmatcher = [Dict valueForKey:key];
if ([stringmatcher containsString:charecters])
{
[resultArray addObject:Dict];
}
else
{
}
}
}
return resultArray;
}
请注意,如果数据不是字典数组的形式,您可以删除与字典相关的代码工作
我在我的项目中使用 UIActionsheet uipickerview。这里,我是根据他的id传值。 我的意思是,在 uipickerview 列表中它会显示名称,并且在通过后它会获取它的 id。
所以,5-10 个值没问题,但假设我有超过 100 个值及其 ID,那么滚动、查找和 select 一个值会花费很多时间。
所以,我想在其中添加搜索选项。因此,在单击我的文本字段后,选择器或弹出窗口将会出现。它首先显示一些列表,以及那里可用的搜索选项,因此用户可以键入任何一个或两个单词,因此根据其单词数据将根据单词出现(自动搜索完成)。
我该如何实现。
如果有人想要 swift... 创建一个名为 txtSearch 的文本字段,然后在 ViewDidload 中添加以下两行
self.txtSearch.delegate=self
self.txtSearch.addTarget(self, action: #selector(self.textFieldValueChanged(TextField:)), for: UIControlEvents.editingChanged)
func textFieldValueChanged(TextField:UITextField)
{
if((TextField.text?.characters.count)!>0)
{
self.filteredArray = (self.searchInArray(srchArray: self.ArraywithFullData, withKey: "key value", Characters: TextField.text!))!
}
else
{
self.filteredArray = self.ArraywithFullData.mutableCopy() as! NSMutableArray
}
self.pickerView.reloadData()
}
func searchInArray(srchArray:NSMutableArray, withKey:String,Characters:String)->NSMutableArray
{
let resultArray=NSMutableArray()
for index in 0..<srchArray.count
{
let Dict = srchArray[index] as! [String:Any]
if let stringmatcher = Dict[withKey] as? String
{
if(stringmatcher.contains(find: Characters))
{
resultArray.add(Dict)
}
else
{
}
}
}
return resultArray
}
extension String {
func contains(find: String) -> Bool{
return self.range(of: find) != nil
}
而对于 Objective-C 你必须做如下的事情。但不要忘记调用 textField Delegates。
NSMutableArray *filteredArray;
NSMutableArray *ArraywithFullData;
self.txtSearch.delegate=self
[self.txtSearch addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
//
-(void)textFieldValueChanged:(UITextField *)TextField
{
if((TextField.text.length)>0)
{
filteredArray = [self searchInArray:ArraywithFullData withKey:@"key value" andCharacters:TextField.text];
}
else
{
filteredArray = [ArraywithFullData mutableCopy];
}
[self.pickerView reloadData];
}
-(NSMutableArray *)searchInArray:(NSMutableArray*)srchArray withKey:(NSString *)key andCharacters:(NSString *)charecters
{
NSMutableArray *resultArray= [[NSMutableArray alloc]init];
for (int index=0 ; index<srchArray.count; index++)
{
NSMutableDictionary *Dict = srchArray[index];
if ([Dict valueForKey:key] != nil)
{
NSString * stringmatcher = [Dict valueForKey:key];
if ([stringmatcher containsString:charecters])
{
[resultArray addObject:Dict];
}
else
{
}
}
}
return resultArray;
}
请注意,如果数据不是字典数组的形式,您可以删除与字典相关的代码工作