2016-05-19 7 views
4

Ich benutze einige Font-Icons in ios, die das Identifizieren des Icons durch seine Unicode-Zeichenfolge erfordern. Ich möchte in der Lage sein, den Code von meinem Server als JSON zurückzuholen und diesen Unicode-String dynamisch zu erstellen, um das Schriftart-Symbol abzurufen und das Etikett usw. einzufügen. Ich habe jedoch Probleme, die Konvertierungen durchzuführen. Irgendwelche Ideen basieren auf dem untenstehenden Code?ios dynamischer Unicode NSString für Font-Icons

Das Arbeitsbeispiel ist hier, wo "E539" die Zeichenfolge ist, die vom Server empfangen wird. Ich kann es hart codieren und es funktioniert, aber es dynamisch zu erstellen ist nicht so einfach.

[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\uE539"]]; 

Diese Arten von Sachen nicht funktionieren:

[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\u%@", @"E539"]]; 
[iconLabel materialIconWithUnicodeStr:[NSString stringWithFormat:@"\\u%@", @"E539"]]; 

ich eine Klasse habe ich hier gefunden UTF32Char die Unicode zu machen nehmen würde. Diese Linie funktioniert, ist aber nicht die ganze Lösung.

Der Versuch, es zusammenzubauen, eher blind von Code, den ich fand, funktioniert fast, aber schafft den falschen Unicode. Ich habe keine Idee warum.

NSString *unicodeStr = @"E539"; 

// attempt to convert E539 -> 0xE539 
UTF32Char outputChar; 
if ([unicodeStr getBytes:&outputChar maxLength:4 usedLength:NULL encoding:NSUTF32LittleEndianStringEncoding options:0 range:NSMakeRange(0, 1) remainingRange:NULL]) { 
    outputChar = NSSwapLittleIntToHost(outputChar); // swap back to host endian 
    // outputChar now has the first UTF32 character 
} 

// this does not give the correct icon at all 
[iconLabel [EntypoStringCreator stringForIcon:outputChar]]; 
+0

Warum nicht wandeln die hexcode in eine Reihe und hängen Sie sich mit „% C“ auf den String? – Eiko

Antwort

3

Ihre materialIconWithUnicodeStr: Methode sucht nach einer Zeichenfolge mit den tatsächlichen Unicode-Zeichen darin codierten. Ihr funktionierendes Beispiel erreicht dies, weil die Escape-Sequenz zur Kompilierzeit funktioniert, um das Zeichen zu generieren. Ihre Beispiele, die nicht funktionieren, schlagen fehl, da es sich bei der \ escape um ein Kompilierungs-Escape handelt, das zur Laufzeit nicht funktioniert, unabhängig davon, wie Sie es formatieren oder doppelklicken.

Sie brauchen eine Möglichkeit, die Unicode-Zeichen zur Laufzeit aus dem Hex-Wert, den Sie haben zu erhalten:

unsigned c = 0; 
NSScanner *scanner = [NSScanner scannerWithString:@"E539" ]; 
[scanner scanHexInt: &c]; 
NSString* unicodeStr = [NSString stringWithFormat: @"%C", (unsigned short)c]; 

[iconLabel materialIconWithUnicodeStr: unicodeStr]; 
+0

Funktioniert wunderbar !! – Miro