UIViewController - (void)setEditing:(BOOL)editing animated:(BOOL)animated

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIViewController - (void)setEditing:(BOOL)editing animated:(BOOL)animated

    Hi Leute,

    ich hab ne iPhone App gebastelt. :tongue:

    Die Hierarchie sieht wie folgt aus:

    UINavigationController -> UIViewController -> UIScrollView -> UIView

    Auf dem UIView sind ein paar Textfelder und ein paar Buttons.

    Jetzt möchte ich beim Laden des UIView diesen nicht editierbar machen. Erst mit dem Benutzen des "EDIT" Buttons soll die Eingabe möglich sein.

    In der Methode viewDidLoad des UIViewControllers setze ich den Button und versuche editing zu verbieten. :

    Quellcode

    1. - (void)viewDidLoad { self.navigationItem.rightBarButtonItem = self.editButtonItem; self.editing = NO; }

    Jedoch hat dies keinerlei Auswirkung auf die Eingebbarkeit des UIView. Es passiert einfach nichts. Jetzt hab ich im Netz gelesen, dass man dies mit mehreren NIBS bewerkstelligen soll, einer eingebbar, der andere nicht. Das kann doch aber nicht wirklich die Lösung sein oder? Hat das jemand schonmal durchgemacht? Was mache ich falsch? Ist der Ansatz richtig?

    Kay
  • Hast Du es mal probiert, das editable der einzelnen Textfelder jeweils auf NO zu setzen und das auf YES zu setzen wenn der Button gedrückt wird?
    (Ist nur so ins Blaue, das konkrete Problem hatte ich noch nicht.)
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Original von kay
    Das könnte man natürlich machen. Allerdings ist das total aufwendig, wenn man mehrere Textfields und Buttons hat.

    Wenn es für alle Textfelder gleich sein soll ist das pillepalle. Einfach Dich als Delegate setzen und immer stumpf self.editing zurückgeben.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Der Ansatz ist richtig, nur Du erwartest eine Automatik, die es nicht gibt. Die Automatik schaltet nur das Flag um und toggelt den Button zwischen Edit und Done. Das ist alles, was versprochen und gehalten wird.

    Du musst - (void)setEditing:(BOOL)editing animated:(BOOL)animated jetzt entsprechend ausstatten und all das selbst machen, was Deinen View technisch und optisch in den richtigen Zustand versetzt.
    Tom
    [url=http://www.osxwerk.de]osXwerk[/url]
  • Original von tom
    Der Ansatz ist richtig, nur Du erwartest eine Automatik, die es nicht gibt. Die Automatik schaltet nur das Flag um und toggelt den Button zwischen Edit und Done. Das ist alles, was versprochen und gehalten wird.

    Du musst - (void)setEditing:(BOOL)editing animated:(BOOL)animated jetzt entsprechend ausstatten und all das selbst machen, was Deinen View technisch und optisch in den richtigen Zustand versetzt.
    Das hab ich mir fast gedacht. Na dann leg ich mal los. Danke!
  • Ich habs jetzt wie folgt gelöst.

    Beim Laden des Views wird die setEditing Methode aufgerufen:

    Quellcode

    1. - (void)viewDidLoad {
    2. [self setEditing:NO animated:YES];
    3. }

    Quellcode

    1. #pragma mark -
    2. #pragma mark Editing Methods
    3. - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    4. [super setEditing:editing animated:animated];
    5. [self textFieldShouldBeginEditing:theTestTextField];
    6. }
    Welche dann textFieldShouldBeginEditing abfragt: Danke Seb2!!! :P

    Quellcode

    1. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    2. if (super.editing == YES) {
    3. return YES;
    4. }
    5. else {
    6. return NO;
    7. }
    8. }
  • Original von kay

    Quellcode

    1. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    2. if (super.editing == YES) {
    3. return YES;
    4. }
    5. else {
    6. return NO;
    7. }
    8. }

    Dat geht auch kürzer...

    Quellcode

    1. return super.editing;

    :D
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Ich habs jetzt nochmal umgefummelt. Ich disable einfach den Edit Button, sobald jemand ins Textfeld klickt.

    Quellcode

    1. #pragma mark -
    2. #pragma mark Editing Methods
    3. - (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    4. [super setEditing:editing animated:animated]; }

    Quellcode

    1. - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    2. if (super.editing == YES) {
    3. self.navigationItem.rightBarButtonItem.enabled = NO;
    4. return YES;
    5. }
    6. else {
    7. return NO;
    8. }
    9. }
    Und wenn jemand das Keyboard dismissed, ist er natürlich wieder aktiv:

    Quellcode

    1. - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    2. // When the user presses return, take focus away from the text field so that the keyboard is dismissed.
    3. if (theTextField == firstTextField) {
    4. [firstTextField resignFirstResponder];
    5. self.navigationItem.rightBarButtonItem.enabled = YES;
    6. // Invoke the method that changes the greeting.
    7. [self updateStringForTextField:firstTextField];
    8. }
    9. else if (theTextField == secondTextField) {
    10. [secondTextField resignFirstResponder];
    11. self.navigationItem.rightBarButtonItem.enabled = YES;
    12. // Invoke the method that changes the greeting.
    13. [self updateStringForTextField:secondTextField];
    14. }
    15. return YES;
    16. }
    Alles anzeigen