Frage

Ich entwickle eine iPhone-Anwendung, die ein mehrzeiliges Textfeld (UITextView) erfordert einen Text zu erfassen.

Wenn der Benutzer innerhalb des Textview berührt wird es firstResponder und zeigt die Tastatur. Was ich brauche, es wirklich zu tun ist, um die Tastatur zu entfernen, wenn der Benutzer fertig ist. Normalerweise mit einem Textfeld würde die Rückkehr / done Taste drückt um das Ende des Tippens signalisieren, und ich würde die Delegaten verwenden, um Ersthelfer zurücktreten. Allerdings mit einem mehrzeiligen Textview Ich möchte der Benutzer eine neue Zeile in der Lage sein hinzuzufügen, damit nicht möglich.

Meine nächste Option wäre Ersthelfer zurückzutreten, wenn es einen Hauch außerhalb der Textansicht nach oben. Das Problem hierbei ist, dass es keine Ereignisse auf UITextView erklärt sind, die ich in Interface Builder sehen kann.

Wie kann ich ein mehrzeiliges Textfeld in einem iPhone-App erstellen, die Ersthelfer zu einer vernünftigen Zeit freigeben wird, wenn der Benutzer mit ihr geschehen ist?

War es hilfreich?

Lösung

Sie können eine DONE-Taste auf der Navigationsleiste:

- (void)viewDidLoad {
      [super viewDidLoad];
  self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
}

, um die Tastatur zu schließen, behandelt das Ereignis mit so etwas wie:

- (void) doneAction: (id) sender{ [textView resignFirstResponder]; }

(nicht vergessen, H-Datei Erklärungen)

Andere Tipps

Ich vermute, Sie die „fehlenden“ Erledigt-Taste auf der Tastatur beklagen, die auf einer Multi-Line ist das Rück UITextView, korrigiert mich wenn ich falsch bin.

Der offensichtliche Ansatz scheint eine andere Taste auf Ihrer Schnittstelle zu haben, die Ersthelfer tritt zurück.

Ich glaube nicht, einige clevere Code, der die Tastatur auf ein Ereignis versteckt wäre sehr intuitiv zu bedienen sein.

Die Apple-Notes-Anwendung seiner oben rechts getan Taste verwendet Ersthelfer zum Rücktritt, ein Ansatz, wie diese erscheint sinnvoll.

//If user touches outside of the keypad, then the keypad will go away
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [[event allTouches] anyObject];
        if (touch.tapCount >= 1) {
            [ZLabel resignFirstResponder];

        }
  }

Sie können eine unsichtbare Schaltfläche erstellen, die alle Bildschirm abdeckt und als ein Verfahren, um es hinzuzufügen. Ich denke, etw wie dies funktionieren wird.

- (IBAction)backgroundClick:(id)sender{
    [textView resignFirstResponder];
}

Wenn Sie ganz eingestellt werden, um die auf der Tastatur ‚done‘ Taste auf, wobei das Verfahren ich benutze, ist das letzte Zeichen in der UITextView überprüfen, wenn der Inhalt ändert. Wenn das letzte Zeichen eine neue Linie ist, dann hat der Benutzer auf die Schaltfläche Fertig getroffen. Ich würde zweite Ansicht Neil, dass es eine andere Taste sein, aber manchmal der Kunde bekommt, was der Kunde will.

Natürlich werden Sie die Delegierten setzen haben für die UITextView auf die Klasse zu zeigen, in dem diese Methode lebt. Die - (void)textViewDidChange:(UITextView *)inTextView Verfahren ist Teil des UITextViewDelegate Protokoll.

- (void)textViewDidChange:(UITextView *)inTextView {
NSString *text = inTextView.text;

if ([text length] > 0 && [text characterAtIndex:[text length] -1] == '\n') {
    message = [text substringToIndex:[text length] -1];
    [delegate messageEdited];
    [self removeFromSuperview];
}

}

  • (BOOL) Textview: (UITextView *) Textview shouldChangeTextInRange: (NSRange) reichen replacement: (NSString *) text {

    [txtView resignFirstResponder];
    

    Rückkehr JA; }

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top