Wie kann ich eine Symbolleiste über der Tastatur hinzufügen?

74

Ich habe UIToolBarprogrammgesteuert ein erstellt und ein hinzugefügt UITextField. Jetzt muss sich diese Symbolleiste über der Tastatur befinden, wenn ich in ein anderes Textfeld klicke.

UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0,400, 320, 60)];
[self.view addSubview:toolBar];

UITextField *txtView=[[UITextField alloc]initWithFrame:CGRectMake(0, 400, 260, 30)];
txtView.backgroundColor =[UIColor  grayColor];
txtView.placeholder=@"Address";
UIBarButtonItem *txtfieldItem=[[UIBarButtonItem alloc]initWithCustomView:txtView];
toolBar.items =[NSArray arrayWithObject:txtfieldItem];
Sushil Sharma
quelle
1
Sie haben hier bereits die Antwort. Bitte checken Sie ein ... stackoverflow.com/a/10594891/3615320
Chan
1
textField.inputAccessoryView = yourToolBar;
Vineesh TP
Es gibt einen neueren Weg, dies zu tun, als eine UIToolBar zu verwenden, pinkstone.co.uk/…
neoneye

Antworten:

131
UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 50)];
numberToolbar.barStyle = UIBarStyleBlackTranslucent;
numberToolbar.items = [NSArray arrayWithObjects:
                               [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
                               [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                               [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
                               nil];
[numberToolbar sizeToFit];
phonenumberTextField.inputAccessoryView = numberToolbar;

So schließen Sie die Tastatur ab:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

Swift 3:

let numberToolbar = UIToolbar(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 50))
numberToolbar.barStyle = UIBarStyle.Default
numberToolbar.items = [
            UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelNumberPad"),
            UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil),
            UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneWithNumberPad")]
    numberToolbar.sizeToFit()
    phonenumberTextField.inputAccessoryView = numberToolbar

Swift 4.2:

let numberToolbar = UIToolbar(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
numberToolbar.barStyle = .default
numberToolbar.items = [
UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelNumberPad)),
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneWithNumberPad))]
numberToolbar.sizeToFit()
phonenumberTextField.inputAccessoryView = numberToolbar

...

@objc func cancelNumberPad() {
    //Cancel with number pad
}
@objc func doneWithNumberPad() {
    //Done with number pad
}
Kittu
quelle
2
Oder es kann mit Storyboard wie hier gemacht werden
Ramis
4
Sie können dies zu allen Textfeldern hinzufügen, indem SieUITextField.appearance().inputAccessoryView = /* your tool bar setup code */
Charlton Provatas
in Swift 4 sollte der Selektor folgendermaßen aussehen: UIBarButtonItem (Titel: "Done", Stil: UIBarButtonItemStyle.done, Ziel: self, Aktion: #selector (self.OnTapDone (_ :)))
Mashhadi
Die Breite der Symbolleiste sollte basierend auf der Bildschirmgröße und nicht auf der Ansichtsgröße festgelegt werden. Bearbeiten Sie diese Option jetzt zusammen mit einer Methode zum Schließen der Tastatur
Albert Renshaw,
99

Sie müssen dies nicht mehr im Code tun.

  1. Ziehen Sie UIView einfach in die obere Leiste der aktuellen Szene und passen Sie sie nach Ihren Wünschen an.

Geben Sie hier die Bildbeschreibung ein

  1. Im Code einfach IBOutletfür beide eingeben : toolbarViewund textViewund Verbindungen herstellen.

    @IBOutlet private var toolbarView: UIView!
    @IBOutlet private var textView: UITextView!
    
  2. In der viewDidLoadEinrichtung Ihrer SymbolleisteView als ZubehörView Ihrer UItextView.

    override func viewDidLoad() {
        super.viewDidLoad()
    
        textView.inputAccessoryView = toolbarView
    }
    

Das Ergebnis lautet wie folgt:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Bartłomiej Semańczyk
quelle
11
Beeindruckend. Ich mache es seit Jahren auf die harte Tour. und die Leute sagen, Storyboards sind nutzlos!
Sirenen
1
Wie Herr House sagt: Leute lügen;)
Bartłomiej Semańczyk
Das ist unglaublich!! Funktioniert super.
AnBisw
1
War mir nicht bewusst, dass du das tun kannst. Genial!
Mike Simz
1
Für den Eingabetext von alertView können Sie Folgendes verwenden: alert.textFields? .first? .inputAccessoryView = toolbarView
oscar castellon
21

Für schnelles (1.2):

let numberToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.frame.size.width, 50))
numberToolbar.barStyle = UIBarStyle.Default

numberToolbar.items = [
    UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "keyboardCancelButtonTapped:"),
    UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil),
    UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "keyboardDoneButtonTapped:")]

numberToolbar.sizeToFit()
yourTextView.inputAccessoryView = numberToolbar
Sunkas
quelle
9

Sie können diesen Code verwenden, es funktioniert für mich.

-(void)viewdidload
{
 UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
 [keyboardDoneButtonView sizeToFit]; 
 UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                        style:UIBarButtonItemStyleBordered target:self
                                                                  action:@selector(doneClicked:)];
  [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
  textField.inputAccessoryView = keyboardDoneButtonView;
 }
-(void)doneClicked:(id)sender
{
NSLog(@"Done Clicked.");
[self.view endEditing:YES];
} 
Anil Prasad
quelle
7

Sie können die Eigenschaft UITextFields inputAccessoryView verwenden

    txtField.inputAccessoryView = toolBar;
Anil Varghese
quelle
3

Swift 3

    let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50))
    toolBar.barStyle = UIBarStyle.default
    toolBar.items = [
        UIBarButtonItem(title: "Button1", style: UIBarButtonItemStyle.plain, target: self, action: #selector(test2)),
        UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil),
        UIBarButtonItem(title: "Button2", style: UIBarButtonItemStyle.plain, target: self, action: #selector(test1))]
    toolBar.sizeToFit()

    myTextField.inputAccessoryView = toolBar
fs_tigre
quelle
1
textField.inputAccessoryView=[weakSelf addToolBar];
[textField setKeyboardType:UIKeyboardTypeNumberPad];

und fügen Sie eine Methode hinzu

-(UIToolbar *)addToolBar
{

    UIBarButtonItem *done=[[UIBarButtonItem alloc]initWithTitle:@"DONE" style:UIBarButtonItemStyleDone target:self action:@selector(done:)];
    UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
    NSArray* toolBarItems=[[NSArray alloc]initWithObjects:done, nil];
    [toolBar setItems:toolBarItems];
    return toolBar;
}
DURGESH
quelle
Der erste Teil ist das Hinzufügen der Symbolleiste oben auf der Tastatur. und zweite wird Symbolleiste erstellt
DURGESH
Vielen Dank für das Interesse an ios
DURGESH
@ DURGESHKUMAR Kannst du bitte diese Zeile erklären? textField.inputAccessoryView = [schwaches Selbst addToolBar];
Gajendra K Chauhan
0

Swift 5.0 und höher

           let toolBar = UIToolbar(frame: CGRect(x: 0.0,
                                                  y: 0.0,
                                                  width: UIScreen.main.bounds.size.width,
                                                  height: 44.0))//1
            let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)//2
            let DoneButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: #selector(tapDone))//3
            toolBar.setItems([flexibleSpace, DoneButton], animated: false)
           textField.inputAccessoryView = toolBar
       // Done Action
        @objc func tapDone() {
           self.view.endEditing(true)
         }
Gurjinder Singh
quelle
-1

In Swift 3 und 4

 let toolBar = UIToolbar()
 toolBar.barStyle = UIBarStyle.default
 toolBar.isTranslucent = true
 toolBar.isUserInteractionEnabled = true
 toolBar.sizeToFit()
 toolBar.items = [
        UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.sendCodeBtnAction(sender:)))]

    tfPhone.inputAccessoryView = toolBar
Spydy
quelle