Không có bộ chọn được tích hợp sẵn cho các quốc gia. Tương tự về trình đọc ảnh cổ điển, đó là những thứ bạn phải tự tạo ra.
Rất may, nó khá dễ dàng để thực hiện và tìm thấy, thời tiết bạn muốn của người khác (lockwood là một lập trình rất đáng tin cậy, tôi chắc chắn CountryPicker của mình là tuyệt vời).
Hoặc bạn có thể đi theo con đường khó khăn hơn và tự làm cho mình từ đầu.
Lưu ý rằng nếu bạn có tất cả mã quốc gia (BE, FR, EN, NL, PT, v.v.), bạn có thể tìm tên được bản địa hóa bằng iOS.
Những gì tôi đã làm trong mã của tôi đã nhập khẩu một từ điển tĩnh lớn của tất cả các mã quốc gia, và chỉ đơn giản là sử dụng tên địa phương của họ trong tableview.
Đây là cách tôi nhận tất cả các mã (và tiền tố quốc tế, vì ứng dụng của tôi cần điều đó).
- (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;
}
Và sau đó tôi đã làm điều này:
- (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];
}
Tôi nghĩ rằng có quá nhiều mã cho những gì bạn cần, nhưng điều này không là điền vào một tableview của tất cả các quốc gia và sắp xếp các điểm đến hiện tại nước (nếu người dùng có một thẻ sim hoặc một NSLocale)
Đây là cách tôi thiết kế tableview:
- (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];
}
Một lần nữa, có một số dòng mà tôi có thể loại bỏ bởi vì điều này là trực tiếp từ mã của tôi, và bởi vì nó không được bình luận (xấu của tôi: D) Tôi không nhớ đó sẽ là quan trọng với bạn và điều đó sẽ không! Nhưng tôi sẽ đọc lại và chỉnh sửa nếu cần.
hi @Nirri ... tôi đang sử dụng khung làm việc cùng .... u đã chạy thành công ..? –
@BhaumikJoshi không chắc tôi có hiểu câu hỏi không? – Nirri
@Niri khi tôi triển khai MRCountryPicker tôi đã triển khai mã được hiển thị trong trang git đó ... bây giờ câu hỏi của tôi là cách hỗ trợ MRCountryPickerDelegate trong UIViewController .... –