2010-08-04 6 views
6

Ich bin auf der Suche nach einer nicht-hackish Lösung, also im Grunde -inputView. Der Teil, über den ich mir nicht sicher bin, ist, wie man ihn wie die normalen Keyboards aussehen lässt, vom Hintergrund bis zu den Tasten. Mir ist klar, dass ich ein Apple Keyboard photoshopen könnte, aber das scheint ein bisschen hackisch zu sein, vor allem wenn Apple (wahrscheinlich nicht, aber immer noch) beschließt, das Aussehen ihrer Tastaturen zu ändern. Ich weiß, dass Numbers ausgezeichnete Arbeit geleistet hat, um zusätzliche Tastaturen herzustellen, die wie Standardsysteme aussehen, und ich würde es gerne so machen (obwohl sie natürlich Zugang zu den gleichen Ressourcen haben, aus denen die Systemtastaturen bestehen, einschließlich möglicher privater Frameworks, usw.)Benutzerdefinierte iPad-Tastatur, die wie die Systemtastaturen aussieht

Antwort

0

Erstellen Sie einen View-Controller und Xib. Die XIB sollte 1-9,0 haben und Schaltflächen löschen, die IBOutlets in Ihrem Controller zugeordnet sind. Speichern und speichern Sie die Rückgabewertzeichenfolge als Eigenschaft. Sie können Dezimalzahlen usw. hinzufügen, wenn Sie möchten. Speichern Sie im Header einen Bearbeitungsblockabschluss mit einer Eigenschaft (oder erstellen Sie alternativ einen Delegaten oder verwenden Sie eine Benachrichtigung).

@property (copy) void(^valueChangedBlock)(NSString* string); 

Auf Ausbesserungs sendet jeder Taste ein Ereignis ein Verfahren wie folgt aus:

- (IBAction) pressKey:(id)sender 
{ 
    NSString *toAppend; 

    // Instead of this switch you can store the values in a dictionary mapped by sender. 
    switch(sender) 
    { 
     case oneButton: [email protected]"1"; break; 
     case twoButton: [email protected]"2"; break; 
     ... 
    } 

    returnValue = [returnValue appendString:toAppend]; 
    valueChanged(returnValue); 
} 

Offensichtlich ist die Löschtaste ein Zeichen aus dem Ende der Zeichenfolge statt Anhängen entfernen sollte. Anders als beim Erstellen des Controllers und Hinzufügen dieser Ansicht als inputView sollten Sie den Wert "ChangedBlock" hinzufügen und festlegen, dass das Textfeld aktualisiert wird. Vielleicht möchten Sie eine klare benutzerdefinierte Schaltfläche über das Textfeld setzen, um das Feld First Responder zu erstellen, so dass es nicht so erscheint, als ob der Benutzer an irgendeinem Punkt der Zeichenfolge bearbeiten könnte.

+0

Hallo Peter, gibt der obige Code in meinem Fall Fehler wie: Pointer sind nicht zulässig Fallwerte. Was ist falsch? Was soll ich machen? Bitte helfen Sie mir –

+0

Ich schrieb diesen Code als ein Beispiel, aber einige Änderungen sind erforderlich. Verwenden Sie if-else-Anweisungen, um zu überprüfen, wer der Absender ist, oder noch besser, speichern Sie die Schaltflächen und ihre resultierenden Werte während der Controller-Initialisierung für eine Einzeilungssuche in der pressKey-Methode in einem Wörterbuch. –

2

I verwendet, um die folgenden:

tenDigitKeyboard.m

-(IBAction)pressedKey:(UIButton *)sender 
{ 
    [delegate pressedKey:sender.tag]; 
} 

wo delegieren `ID delegieren definiert ist;

dann in den Delegaten ich tun ...

-(void)pressedKey:(NSInteger)key 
{ 
    NSString * bufferString = model.string; 
    if (key == -1) {//delete 
     model.string = [bufferString substringWithRange:NSMakeRange(0, [bufferString length]-1)]; 
    }else{ 
    //will need to change the following to lookup key value based on a lookup of the button.tag 
     model.string = [bufferString stringByAppendingFormat:@"%i",key]; 
    } 
    [self update];//updates the view 
} 

bekam ich die Tastatur-Taste Grafik von: http://www.teehanlax.com/blog/iphone-gui-psd-v4/

Verwandte Themen