Nein, es gibt keinen eingebauten Picker für Länder. Das Gleiche gilt für den klassischen Bildleser, es ist das Zeug, das Sie selbst machen müssen.
Glücklicherweise ist es ziemlich einfach zu machen und zu finden, ob Sie jemand anderes wollen (lockwood ist ein sehr zuverlässiger Programmierer, ich bin mir sicher, dass sein CountryPicker großartig ist).
Oder Sie können den härteren Weg gehen und einen selbst von Grund auf neu machen.
Beachten Sie, dass Sie den lokalisierten Namen mit iOS finden können, wenn Sie alle Ländercodes (BE, FR, EN, NL, PT usw.) haben.
In meinem Code habe ich ein umfangreiches statisches Wörterbuch aller Ländercodes importiert und einfach ihre lokalisierten Namen in der Tabellenansicht verwendet.
So habe ich alle Codes (und internationale Präfixe, weil meine App das benötigt).
- (NSMutableDictionary*)dialCodeDict{
NSMutableDictionary *dialCodeDict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
@"972", @"IL",
@"93", @"AF",
@"355", @"AL",
@"213", @"DZ",
@"1", @"AS",
@"376", @"AD",
@"244", @"AO",
@"1", @"AI",
@"1", @"AG",
@"54", @"AR",
@"374", @"AM",
@"297", @"AW",
@"61", @"AU",
@"43", @"AT",
@"994", @"AZ",
@"1", @"BS",
@"973", @"BH",
@"880", @"BD",
@"1", @"BB",
@"375", @"BY",
@"32", @"BE",
@"501", @"BZ",
@"229", @"BJ",
@"1", @"BM", @"975", @"BT",
@"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO",
@"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH",
@"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY",
@"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN",
@"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG",
@"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU",
@"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ",
@"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG",
@"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE",
@"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI",
@"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA",
@"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH",
@"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD",
@"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN",
@"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN",
@"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID",
@"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT",
@"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ",
@"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG",
@"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR",
@"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG",
@"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML",
@"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR",
@"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC",
@"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA",
@"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP",
@"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ",
@"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU",
@"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM",
@"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG",
@"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL",
@"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO",
@"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA",
@"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL",
@"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB",
@"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK",
@"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE",
@"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG",
@"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN",
@"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV",
@"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB",
@"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU",
@"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW",
@"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD",
@"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA",
@"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE",
@"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY",
@"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD",
@"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE",
@"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN",
@"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC",
@"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963",
@"SY",@"886",
@"TW", @"255",
@"TZ", @"670",
@"TL",@"58",
@"VE",@"84",
@"VN",
@"284", @"VG",
@"340", @"VI",
@"678",@"VU",
@"681",@"WF",
@"685",@"WS",
@"967",@"YE",
@"262",@"YT",
@"27",@"ZA",
@"260",@"ZM",
@"263",@"ZW",
nil];
return dialCodeDict;
}
Und dann tat ich dies:
- (void)viewDidLoad {
_dialCodes = [self dialCodeDict];
[self setCodes];
}
- (void)setCodes{
CTTelephonyNetworkInfo *network_Info = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = network_Info.subscriberCellularProvider;
NSArray *keys = [_dialCodes allKeys];
NSArray *values = [_dialCodes allValues];
_countries = [[NSMutableArray alloc]initWithCapacity:[_dialCodes count]];
NSString *baseCountry = [_dialCodes objectForKey:carrier.isoCountryCode.uppercaseString];
for (int i = 0; i < [_dialCodes count] ; i++){
Country *c = [[Country alloc]init];
c.isoC = [keys objectAtIndex:i];
c.dialC = [values objectAtIndex:i];
c.nameC = [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:c.isoC];
c.isLocal = NO;
if ([baseCountry isEqualToString:[values objectAtIndex:i]]){
c.isLocal = YES;
_myCountry = c;
}
[_countries addObject:c];
}
[_countries sortUsingComparator:^(Country *firstObject, Country *secondObject) {
return [firstObject.nameC caseInsensitiveCompare:secondObject.nameC];
}];
[self.tableView reloadData];
idx = [NSIndexPath indexPathForRow:[_countries indexOfObject:_myCountry] inSection:0];
[self.tableView selectRowAtIndexPath:idx animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
Ich denke, es gibt zu viel Code ist für das, was Sie brauchen, aber das, was tut, ist eine Tableview aller Länder füllen und den Blick auf die aktuelle ausrichten Land (wenn der Benutzer eine sIM-Karte oder eine NSLocale hat)
Dies ist, wie ich die Tableview entworfen:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"InternationalCell";
CustomCellInternationalTableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil){
[tableView registerNib:[UINib nibWithNibName:@"CustomCellInternationalTableViewCell" bundle:nil] forCellReuseIdentifier:cellIdentifier];
cell = [[CustomCellInternationalTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}else{
cell.lbCountry.text = [[_countries objectAtIndex:indexPath.row]nameC];
cell.lbCode.text = [NSString stringWithFormat:@"+%@",[[_countries objectAtIndex:indexPath.row]dialC]];
if ([[_countries objectAtIndex:indexPath.row]isLocal] == YES){
cell.contentView.backgroundColor = FlatGray;
}else{
cell.contentView.backgroundColor = ClearColor;
}
}
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [_countries count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
_myCountry = [_countries objectAtIndex:indexPath.row];
self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self dismissViewControllerAnimated:YES completion:nil];
}
Auch hier gibt es einige Zeilen, die ich entfernen könnte, weil dies direkt von meinem Code ist, und weil es nicht gut kommentiert ist (mein schlechtes: D) Ich weiß nicht mehr, was für Sie wichtig wäre und welches nicht! Aber ich werde neu lesen und bearbeiten, wenn nötig.
hallo @Nirri ... i gleichen Rahmen Arbeit bin mit .... u erfolgreich ausgeführt haben ..? –
@BaumikJoshi nicht sicher, verstehe ich die Frage? – Nirri
@Niri, wenn ich MRCountryPicker implementiere ich hatte den Code in dieser Git-Seite in Ordnung zu implementieren ... jetzt meine Frage ist, wie man MRCountryPickerDelegate in UIViewController .... –