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!
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