1. 程式人生 > >iOS漢字轉拼音,根據首字母建立索引條,UISearchController

iOS漢字轉拼音,根據首字母建立索引條,UISearchController

我從後臺獲取到資料,想做的效果就是把獲取到的資料文字的首字母提取出來做成索引條顯示,便於使用者選擇,用到的知識就是,將漢字轉換成拼音再提取首字母轉換大小寫,再排序,然後顯示在索引條上


也許可愛的後臺人員給你的資料就是類似這種,意思就是數組裡面一堆字典,我只需要把其中某個鍵值對取出來,然後把文字變成拼音,取出來首字母給它排下順序,換成大寫字母就OK了,就是這麼簡單

直接上關鍵程式碼

這個方法就是將你獲取的資料漢字抽取出來,獲取首字母,放進字典,鍵是首字母,值是漢字

- (NSDictionary *)createCharacter:(NSMutableArray *)strArr

{

NSMutableDictionary *dict = [NSMutableDictionarydictionary];

   for (NSDictionary *stringdictin strArr) {

       NSString *string = stringdict[@"name"];

       if ([stringlength]) {

           NSMutableString *mutableStr = [[NSMutableStringalloc]initWithString:string];

if (CFStringTransform((__bridge

CFMutableStringRef)mutableStr,0,kCFStringTransformMandarinLatin,NO)) {

            }

if (CFStringTransform((__bridgeCFMutableStringRef)mutableStr,0,kCFStringTransformStripDiacritics,NO)) {

               NSString *str = [NSStringstringWithString:mutableStr];

                str = [struppercaseString

];

               NSMutableArray *subArray = [dictobjectForKey:[str substringToIndex:1]];

               if (!subArray) {

                    subArray = [NSMutableArrayarray];

                    [dictsetObject:subArrayforKey:[str substringToIndex:1]];

                }

                [subArrayaddObject:string];

            }

        }

    }

   return dict;

}



這個方法是將字母按照A~Z的順序進行排列顯示

_dataArray = [self.allKeysDict.allKeyssortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2) {

       NSString *letter1 = obj1;

       NSString *letter2 = obj2;

       if (KCNSSTRING_ISEMPTY(letter2)) {

returnNSOrderedDescending;

        }elseif ([letter1characterAtIndex:0] < [letter2characterAtIndex:0]) {

returnNSOrderedAscending;

        }

returnNSOrderedDescending;

    }];


再接下來就是寫表了

//建立右側索引表,返回需要顯示的索引表陣列

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return self.dataArray.count;

}

- (NSArray *) sectionIndexTitlesForTableView:(UITableView *)tableView {

return self.dataArray;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

   return [(NSArray*)self.allKeysDict[self.dataArray[section]]count];

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

{

   returnself.dataArray[section];

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

   staticNSString *cellID =@"cell";

   UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:cellID];

   if (cell ==nil) {

        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cellID];

    }

    cell.textLabel.text = [self.allKeysDict[self.dataArray[indexPath.section]]objectAtIndex:indexPath.row];

   return cell;

}


新增加搜尋功能

seachVC = [[UISearchControlleralloc]initWithSearchResultsController:nil];

seachVC.searchResultsUpdater =self;

seachVC.dimsBackgroundDuringPresentation =false;

    [seachVC.searchBarsizeToFit];

_tableView.tableHeaderView =seachVC.searchBar;

宣告實現協議UISearchResultsUpdating

#pragma mark - searchController delegate

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {

//    [self.littleArray removeAllObjects];

   NSPredicate *searchPredicate = [NSPredicatepredicateWithFormat:@"SELF CONTAINS[c] %@",searchController.searchBar.text];

self.littleArray = [[self.dataArrayfilteredArrayUsingPredicate:searchPredicate] mutableCopy];

NSLog(@"--------------------%@",_littleArray);

dispatch_async(dispatch_get_main_queue(), ^{

        [self.tableViewreloadData];

    });

}


相關推薦

iOS漢字拼音根據字母建立索引UISearchController

我從後臺獲取到資料,想做的效果就是把獲取到的資料文字的首字母提取出來做成索引條顯示,便於使用者選擇,用到的知識就是,將漢字轉換成拼音再提取首字母轉換大小寫,再排序,然後顯示在索引條上 也許可愛的後臺人員給你的資料就是類似這種,意思就是數組裡面一堆字典,我只需要把其

SQL Server編寫函式獲取漢字拼音碼(字母

Create function fun_getPY ( @str nvarchar(4000) ) returns nvarchar(4000) as begin declare @word nchar(1),@PY nvarchar(4000) set @PY='' while len

利用tableView分組實現省份各個城市的分組利用字母作為索引

- (void)viewDidLoad {     [superviewDidLoad];     [self_loadData];     [self_initSubView]; } #pragma mark - 載入資料 - (void)_loadData{

給出字串字母轉換為大寫其餘轉換為小寫只考慮英文

問題描述: 從鍵盤錄入一段字串,把首字母轉換為大寫,其餘轉換為小寫,只考慮英文 方法一:最原始的方法  *   分析:1、將使用者輸入的字串轉換為字元陣列  *              2、根據要求,分離首字母,將其通過valueOf()變為字串,再通過toUpperC

Android工具類——拼音幫助類PinyinUtils漢字拼音字母

import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4

簡單測試--C#實現中文漢字拼音字母

esp chart htm foreach ext ads linq 類庫 play 第一種: 這個是自己寫的比較簡單的實現方法,要做漢字轉拼音首字母,首先應該有一個存儲首字母的數組,然後將要轉拼音碼的漢字與每個首字母開頭的第一個漢字即“最小”的漢字作比較,這裏的最小指的是

oracle漢字拼音(獲得全拼/拼音字母/拼音截取等)

sub 截取 需要 sel 內容 zip bsp .com 整理 oracle漢字轉拼音(獲得全拼/拼音首字母/拼音截取等) 效果如下: Oracle 字符集 GBK 沒有問題 , UTF -8 需要修改一下Sql代碼 --oracle漢字轉拼音 PACKAGE --1

php漢字拼音 php 漢字字母

php漢字轉拼音 php 漢字取首字母 <?php /** * Class ConvertToPingYin * * 請到對應的網站申請轉換介面 * * https://www.showapi.com/api/lookPoint/99 */ class ConvertToP

SQL 漢字拼音字母 .sql 檔案

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_procGetPY]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

Vue將漢字轉為拼音取出字母

效果圖: .ts import HanziToPinyin from "../../hanziToPinyin"; export default class Message extends Vue { mounted() { let hanZi = "你好嗎";

oracle漢字拼音(獲得全拼/拼音字母/拼音擷取等)

http://www.cnblogs.com/wlzhang/p/5437791.html 效果如下: Oracle 字符集 GBK 沒有問題 , UTF -8 需要修改一下 Sql程式碼   --oracle漢字轉拼音 PACKAGE  

asp.net漢字拼音和獲取漢字字母的程式碼

using System; using System.Data; using System.Configuration; using System.Text; /// <summary> /// Summary description for ConvertHzToPz

delphi 漢字拼音字母

function HZtoPY(HZStr: WideString): String; Var s, c: AnsiString; i: Integer; begin Result := ''; for i := 1 To Length(HZStr) do

asp.net漢字拼音 可返回拼音字母

呼叫方法:PinYinClass.GetPinYin("漢字",true);//true返回首字母;false不返回 結果:hanzi,hz PinYinClass.cs using System; using System.Text; using System.Colle

java根據漢字拼音多音字人工處理資料庫表字段型別為nvarchar,其它要亂碼

package com.zsjz.utils.tools; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; i

C#漢字拼音(npinyin)將中文轉換成拼音全文或字母

1.Chinese2Spell.cs 一些不能識別的漢字全部轉為Z 2.Microsoft Visual Studio International Feature Pack 1.0  連"廣"、“區”都不能轉,很讓人失望。 這些都是2010年以前的方案,至少還有大俠在為漢字轉拼音不斷努力著,目前發現最完美

漢字拼音

1,需要的的jar      <dependency>             <groupId>com.belerweb</groupId>

Android中漢字拼音的兩種方法優劣比較

一、前言 在我們的開發中,有時會有這樣的需求,就是聯絡人列表按照拼音順序排列(如通訊錄)。於是,我也在網上搜到了許多這類的文章,就兩種最常見的做法在此進行簡單的比較和分析 二、漢字轉拼音的方法 使用第三方pinyin4j的jar包。 下載地

JS漢字拼音超級實用

/** * 中文字串轉化為拼音 * alert(convertToPinyinLower("你好啊")); */ function hash(_key,_value) { this.key = _key; // 拼音*/ this.value = _value; //

Java/Android中漢字拼音的兩種方法優劣比較

一、前言 在我們的開發中,有時會有這樣的需求,就是聯絡人列表按照拼音順序排列(如通訊錄)。於是,我也在網上搜到了許多這類的文章,就兩種最常見的做法在此進行簡單的比較和分析 二、漢字轉拼音的方法 使用第三方pinyin4j的jar包。 下載地址  , Android St