Ich möchte ein UIBarButtonItem mit einem benutzerdefinierten Bild erstellen, aber ich möchte nicht den Rand, den das iPhone hinzufügt, da mein Bild einen speziellen Rand hat.
Es ist dasselbe wie die Zurück-Taste, aber eine Vorwärts-Taste.
Diese App ist für ein inHouse-Projekt gedacht, daher ist es mir egal, ob Apple sie ablehnt oder genehmigt oder mag :-)
Wenn ich die Eigenschaft initWithCustomView: v des UIBarButtonItem verwende, kann ich Folgendes tun:
UIImage *image = [UIImage imageNamed:@"right.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
[button addTarget:self action:@selector(AcceptData) forControlEvents:UIControlEventTouchUpInside];
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
[v addSubview:button];
UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem= forward;
[v release];
[image release];
Dies funktioniert, aber wenn ich diesen Vorgang in 10 Ansichten wiederholen muss, ist dies nicht trocken.
Ich nehme an, ich muss eine Unterklasse bilden, aber was?
- NSView?
- UIBarButtonItem?
Vielen Dank,
Grüße,
ios
iphone
uibarbuttonitem
Mongeta
quelle
quelle
Antworten:
Sie können UIBarButtonItem eine Methode hinzufügen, ohne sie mithilfe einer benutzerdefinierten Kategorie zu unterordnen:
Sie können also überall in Ihrem Code ein Balkenelement erstellen, das diese Methode aufruft (vorausgesetzt, Sie fügen der Deklaration einen Header hinzu).
PS Sie müssen 'v' UIView nicht verwenden, da Sie
UIBarButtonItem
mit einer Schaltfläche direkt als benutzerdefinierte Ansicht erstellen können.PPS Sie benötigen außerdem [Forward Release] in Ihrem Code.
quelle
Eine andere einfache Lösung ist
quelle
Ich fand es so einfach. Es wird oben gezuckert. "random.png" muss im Projekt sein. Ziehen Sie einfach ein Bild per Drag & Drop.
quelle
Eine Alternative ist die Unterklasse UIBarButtonItem. Warum? Damit wird die Aktion auf dem Ziel mit dem richtigen Absender aufgerufen. Im obigen Code ist das Absenderargument in der Aktionsnachricht die UIButton-Instanz, nicht die UIBarButtonItem-Instanz. Dies ist beispielsweise wichtig, wenn Sie einen UIPopoverController über die Leistenschaltfläche präsentieren möchten. Durch Unterklassen von UIBarButtonItem können Sie einen ivar hinzufügen, der das ursprüngliche Ziel beibehält, sodass unsere Unterklasseninstanzen die Aktionsnachricht abfangen, ändern und an den richtigen Absender weiterleiten können.
Also, CCFBarButtonItem.h:
und CCFBarButtonItem.m
quelle
quelle
Dies kann auch programmgesteuert erfolgen (natürlich):
Erstellen Sie zunächst eine benutzerdefinierte Ansicht. Diese benutzerdefinierte Ansicht kann ein Bild, eine Schaltfläche oder was auch immer Sie möchten enthalten. Die benutzerdefinierte Ansicht kann programmgesteuert oder in IB erstellt werden:
Erstellen Sie als Nächstes ein UIBarButtonItem und initialisieren Sie es mit der benutzerdefinierten Ansicht.
Fügen Sie jetzt einfach den benutzerdefinierten UIBarButton zum leftBarButtonItem hinzu:
quelle
Ok, diese Kategorie funktioniert sehr gut, da es keine Probleme mit Popovercontroller gibt :-)
quelle
Schauen Sie sich diese einfache Lösung an.
Hier ist 1x1.png ein 1 Pixel transparentes PNG-Bild, das Sie über den unten stehenden Link herunterladen können
http://commons.wikimedia.org/wiki/File:1x1.png
quelle
Eine andere Lösung, denken Sie, es ist einfacher, wenn Sie Schaltflächen programmgesteuert erstellen:
quelle