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];

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
}

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


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

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];
} 

7

Sie können die Eigenschaft UITextFields inputAccessoryView verwenden

    txtField.inputAccessoryView = toolBar;

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

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;
}

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)
         }

-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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.