Daher verfügt die Numpad-Tastatur standardmäßig nicht über die Schaltfläche "Fertig" oder "Weiter", daher möchte ich eine hinzufügen. In iOS 6 und darunter gab es einige Tricks, um der Tastatur eine Schaltfläche hinzuzufügen, aber sie scheinen in iOS 7 nicht zu funktionieren.
Zuerst abonniere ich die Tastatur mit der Benachrichtigung
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
Dann versuche ich, eine Schaltfläche hinzuzufügen, wenn die Tastatur angezeigt wird:
- (void)keyboardWillShow:(NSNotification *)note
{
// create custom button
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeSystem];
doneButton.frame = CGRectMake(0, 50, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setTitle:@"Done" forState:UIControlStateNormal];
[doneButton addTarget:self action:@selector(dismissKeyboard) forControlEvents:UIControlEventTouchUpInside];
// locate keyboard view
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
for(int i=0; i<[tempWindow.subviews count]; i++)
{
keyboard = [tempWindow.subviews objectAtIndex:i];
// keyboard view found; add the custom button to it
if([[keyboard description] hasPrefix:@"UIKeyboard"] == YES)
[keyboard addSubview:doneButton];
}
}
Die for-Schleife wird jedoch nicht ausgeführt, da keine Unteransichten gefunden werden. Irgendwelche Vorschläge? Ich konnte keine Lösung für iOS7 finden. Gibt es eine andere Möglichkeit, wie ich das tun soll?
Bearbeiten: Danke für all die Vorschläge für Symbolleisten, aber ich würde diesen Weg lieber nicht gehen, da ich ziemlich platzarm bin (und es ist irgendwie hässlich).
quelle
Antworten:
Dies ist eine einfache Möglichkeit, eine fertige Schaltfläche in der iOS7-Zehnertastatur zu projizieren. Fügen Sie in der folgenden Delegate-Methode von UITextField eine Benachrichtigung für die Tastaturshow hinzu.
Implementieren Sie nun die Methode
keyboardWillShow
wie folgt. Hier müssen wir besonders auf iOS7 achten.Fügen Sie dieses Makro nun zu einem geeigneten Header hinzu, um SYSTEM_VERSION zu erkennen
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
quelle
Der viel sicherere Ansatz ist die Verwendung eines
UIToolBar
mitDone
Button alsinputAccessoryView
.Beispielcode :
Ihre
-doneClicked
Methode sollte folgendermaßen aussehen:Beispielcode Swift:
Ihre
-doneClicked
Methode sollte folgendermaßen aussehen:quelle
UIBarButtonItemStyleBordered
ist veraltete VerwendungUIBarButtonItemStyleDone
oderUIBarButtonItemStylePlain
Noch einfacher:
Swift 3.0 und höher :
Swift 2.3 und niedriger :
Ziel C :
BEARBEITEN:
Ich habe eine nützliche Bibliothek namens DCKit erstellt , in der die Symbolleiste bereits sofort verfügbar ist:
Es hat auch viele andere coole Funktionen.
quelle
initWithTitle:@"Done"
, ich benutzeinitWithBarButtonSystemItem:UIBarButtonSystemItemDone
stattdessen. Dadurch wird die Standard-Schaltfläche "Fertig" von Apple zurückgegeben. Außerdem wird es bereits lokalisiert seinBauen Sie einfach auf den obigen Antworten mit der Swift-Version auf, da ich sie übersetzen musste:
quelle
Sie können verwenden
Die Eingabezubehöransicht ist eine Ansicht, die immer über die Tastatur angezeigt wird und mit der Option geschlossen wird
[textfield resignFirstResponder]
stellt doneden Eingang Blick auf und resignfirst responder die Textfelder durchzuführen.
quelle
Benutz einfach
hoffe du hilfst
quelle
quelle
Sie müssen erkennen, ob Sie sich auf einem Telefon oder iPad befinden, da das iPad eine Eingabetaste auf dem Nummernblock implementiert
quelle
Tastaturansicht gefunden werden hasPrefix: @ "UIKeyboard", die Schaltfläche kann nicht als Unteransicht hinzugefügt werden. Hier ist meine Lösung: Geben Sie hier die Linkbeschreibung ein
quelle