2017-12-08 4 views
0

Ich versuche, eine benutzerdefinierte Leiste Schaltfläche zu meinem Projekt hinzuzufügen, und ich habe ein paar Probleme. Zuerst die Anforderung lässt für meine Taste gehen, braucht es:Kann benutzerdefinierte UIBarButton Item nicht ändern

- to display a custom font 
- to be enabled/disabled 
- to have its colour animated based to provide user feedback. 

Also zuerst habe ich versucht, einen barButtonItem nach oben durch das Storyboard verbinden und ich konnte die Farbe ändern und sie aktivieren deaktivieren. Allerdings konnte ich die Schriftart nicht ändern oder Farbanimationen hinzufügen. Ich möchte in die Lage, das folgende Verfahren zu verwenden, die ich bereits in der App mit der Farbe zu animieren:

- (void)textFlashTextfieldAnimation:(nonnull UITextField *)view duration:(NSTimeInterval)duration animateToColour:(UIColor*)animationColour textColor:(UIColor*)textColour completion:(void (^)(BOOL finished))completion { 
    [UIView transitionWithView:view duration:0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
     view.textColor = animationColour; 
    } completion:^(BOOL finished) { 
     [UIView transitionWithView:view duration:2.0f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
      view.textColor = textColour; 
     } completion:completion]; 
    }]; 
} 

Idealerweise würde ich in der Lage sein, um diese Funktion zu ändern, um ein barButtonItem/UIButton so zu akzeptieren, dass ich animieren könnte es leicht. Wenn ich den Button jedoch durch Storyboards verbinde, kann ich nicht auf die Ebene der Schaltfläche zugreifen, sodass die Animation nicht möglich ist.

Ich hatte angefangen, über diesen Code zu gehen, aber ich habe 2 Sackgassen untergegangen. Hier ist eine wirklich grundlegende Implementierung eines barButtonItem:

UIBarButtonItem *myButton=[[UIBarButtonItem alloc] initWithTitle:@"My Custom Button" style:UIBarButtonItemStylePlain target:self action:@selector(/*do something*/)]; 
    [self.navigationItem setRightBarButtonItem:myButton]; 

Jetzt wird dies in der Tat arbeiten, dass ich es wie ein Storyboard-Taste verwenden können, aber ich kann nicht die Schriftart ändern oder die Ebenentaste zuzugreifen, so ist es auch nicht gut .

Ich habe dann versucht, für meine Bar, um eine vollständig benutzerdefinierte Ansicht erstellen, indem ein UIView und UIButton zu schaffen und sie dann zu einem barButtonItem hinzugefügt hat, kann dies hier zu sehen:

UIFont *barButtonFonts = [UIFont fontWithName:kFont size:16]; 

    //Right Button 
    //create view 
    UIView *rightButtonView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 45, 25)]; 

    //create button 
    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeSystem]; 
    rightButton.backgroundColor = [UIColor clearColor]; 
    rightButton.frame = rightButtonView.frame; //set frame = to view 
    [rightButton setTitle:NSLocalizedString(@"Save", nil) forState:UIControlStateNormal]; 
    rightButton.titleLabel.font = barButtonFonts; 

    rightButton.tintColor = [UIColor redColor]; 

    [rightButton addTarget:self action:@selector(actionMethod) forControlEvents:UIControlEventTouchUpInside]; 

    [rightButtonView addSubview:rightButton]; 

    UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:rightButtonView]; 

    self.navigationItem.rightBarButtonItem = rightBarButton; 

Jetzt habe ich ein barButtonItem dass zeigt eine benutzerdefinierte Schriftart an, hat jedoch keine UI-Interaktion. Es sieht genauso aus, wenn aktiviert/deaktiviert und wenn nicht markiert/hervorgehoben. Der Button funktioniert so, wie er sollte, er sieht einfach nicht so aus, wie er sollte.

Sollte ich irgendwo in meinem Code eine Steckdose für diese Taste erstellen, damit ich die Schaltfläche in der Ansicht ändern kann? Ist es sogar möglich, eine Schaltfläche zu ändern, nachdem sie der Navigationsleiste hinzugefügt wurde?

Wenn jemand irgendwelche Vorschläge hat, würde es geschätzt werden!

Antwort

1

Yeah barbuttonitem ist nicht änderbar, nachdem Sie es der Leiste hinzugefügt haben. Ich kann nur daran denken, den Knopf zu entfernen und einen neuen (mit den neuen Eigenschaften) hinzuzufügen, wenn der Benutzer damit interagiert. Ich empfehle Ihnen, eine benutzerdefinierte Symbolleiste (wie eine normale UIView) zu verwenden und dann eine normale Schaltfläche hinzuzufügen. es wäre einfacher zu passen

+0

Ja hatte ich schließlich herausgefunden. Ich hatte gehofft, die 'customView' -Eigenschaft des 'barButton' zu benutzen, um einige Animationen zu machen (und tatsächlich könnte ich den Hintergrund animieren), aber nichts anderes würde funktionieren. Ich habe jetzt nur normale aktivierte/ausgewählte/deaktivierte Zustände für die Taste eingestellt und es funktioniert. – Axemasta

Verwandte Themen