Frage

Ich versuche, ein Etikett zu meiner Symbolleiste hinzuzufügen. Taste funktioniert gut, aber wenn ich das Label-Objekt hinzufügen, es stürzt ab. Irgendwelche Ideen?

UIBarButtonItem *setDateRangeButton = [[UIBarButtonItem alloc] initWithTitle:@"Set date range"
                                                                       style:UIBarButtonItemStyleBordered
                                                                      target:self
                                                                      action:@selector(setDateRangeClicked:)];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 20, 20)];
label.text = @"test";

[toolbar setItems:[NSArray arrayWithObjects:setDateRangeButton,label, nil]];

// Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];

// Reload the table view
[self.tableView reloadData];
War es hilfreich?

Lösung

Haben Sie einen Blick in diesen

[[UIBarButtonItem alloc] initWithCustomView:yourCustomView];

Im Wesentlichen muss jeder Punkt ein „Knopf“ sein, aber sie können Sie benötigen mit einem beliebigen Ansicht instanziert werden. Hier ist ein Beispiel-Code. Beachten Sie, da andere Tasten der Regel auf der Symbolleiste sind, Abstandshalter auf jeder Seite der Titeltaste platziert werden, so dass es zentriert bleibt.

NSMutableArray *items = [[self.toolbar items] mutableCopy];

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:spacer];
[spacer release];

self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f, self.view.frame.size.width, 21.0f)];
[self.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];
[self.titleLabel setBackgroundColor:[UIColor clearColor]];
[self.titleLabel setTextColor:[UIColor colorWithRed:157.0/255.0 green:157.0/255.0 blue:157.0/255.0 alpha:1.0]];
[self.titleLabel setText:@"Title"];
[self.titleLabel setTextAlignment:NSTextAlignmentCenter];

UIBarButtonItem *spacer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:spacer2];
[spacer2 release];

UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithCustomView:self.titleLabel];
[items addObject:title];
[title release];

[self.toolbar setItems:items animated:YES];
[items release];

Andere Tipps

Für diejenigen, Interface Builder mit Ihrem UIToolBar Layout, es ist auch möglich, dies mit Interface Builder allein zu tun.

Um ein UILabel zu einem UIToolBar hinzufügen Sie benötigen ein allgemeines UIView Objekt in den UIToolBar in IB hinzufügen, indem Sie ein neues UIView Objekt über Ihren UIToolBar ziehen. IB wird automatisch ein UIBarButtonItem erstellen, die mit Ihrem eigenen UIView initialisiert werden. Als nächstes fügen Sie eine UILabel zum UIView und bearbeiten Sie die UILabel grafisch Ihre bevorzugten Stil anzupassen. Sie können dann visuell richten Sie Ihre festen und / oder variablen Abstandshalter wie gewünscht Ihre UILabel entsprechend zu positionieren.

Sie müssen dann auch den Hintergrund sowohl der UILabel und der UIView clearColor die UIToolBar erhalten durch korrekt unter der UILabel zu zeigen.

fand ich answerBot Antwort sehr nützlich, aber ich denke, dass ich eine noch einfachere Art und Weise zu finden, in Interface Builder:

  • erstellen UIBarButtonItem und fügen Sie sie der Toolbar im Interface Builder

eingeben Bild Beschreibung hier

  • Deaktivieren Sie die Option "aktiviert" für diese BarButtonItem

eingeben Bild Beschreibung hier

  • Dieses BarButtonItem auf eine Eigenschaft in der Klasse stecken (dies ist in Swift, würde aber in Obj-C sehr ähnlich sein):

    @IBOutlet private weak var lastUpdateButton: UIBarButtonItem! // Dummy barButtonItem whose customView is lastUpdateLabel
    
  • fügen Sie eine weitere Eigenschaft für das Label selbst:

    private var lastUpdateLabel = UILabel(frame: CGRectZero)
    
  • in viewDidLoad, fügen Sie den folgenden Code, um die Eigenschaften Ihres einstellen beschriften, und fügen Sie es als Custom Ihrer BarButtonItem

    // Dummy button containing the date of last update
    lastUpdateLabel.sizeToFit()
    lastUpdateLabel.backgroundColor = UIColor.clearColor()
    lastUpdateLabel.textAlignment = .Center
    lastUpdateButton.customView = lastUpdateLabel
    
  • den UILabel Text zu aktualisieren:

    lastUpdateLabel.text = "Updated: 9/12/14, 2:53"
    lastUpdateLabel.sizeToFit() 
    

Ergebnis:

eingeben Bild Beschreibung hier

Sie haben lastUpdateLabel.sizetoFit() jedes Mal, rufen Sie den Beschriftungstext aktualisieren

Eines der Dinge, die ich diesen Trick bin mit für ist ein UIActivityIndicatorView auf dem UIToolBar zu instanziiert, etwas, das sonst nicht möglich wäre. Zum Beispiel hier habe ich eine UIToolBar mit 2 UIBarButtonItem, einem FlexibleSpaceBarButtonItem und dann einem anderen UIBarButtonItem. Ich möchte ein UIActivityIndicatorView in die UIToolBar zwischen dem flexiblen Raum einzufügen und die endgültige (rechte) Taste. Also in meinem RootViewController ich die folgenden,

- (void)viewDidLoad {
[super viewDidLoad];// Add an invisible UIActivityViewIndicator to the toolbar
UIToolbar *toolbar = (UIToolbar *)[self.view viewWithTag:767];
NSArray *items = [toolbar items];

activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 20.0f, 20.0f)];
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];    

NSArray *newItems = [NSArray arrayWithObjects:[items objectAtIndex:0],[items objectAtIndex:1],[items objectAtIndex:2],
                     [[UIBarButtonItem alloc] initWithCustomView:activityIndicator], [items objectAtIndex:3],nil];
[toolbar setItems:newItems];}

Ähnlich wie Matt R verwendet I Interface Builder. Aber ich wollte innen statt 1 UIWebView haben, so dass ich einige Texte fett gedruckt und andere haben kann Text nicht (wie der Mail-App). So

  1. Fügen Sie die Webansicht statt.
  2. Deaktivieren Sie die Option undurchsichtig
  3. Stellen Sie sicher, Hintergrund ist klar Farbe
  4. alles Schalte mit IBOutlet
  5. Verwenden Sie die unten html einen transparenten Hintergrund haben, so dass die Symbolleiste durchscheint

Code:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
NSString *html = [NSString stringWithFormat:@"<html><head><style>body{font-size:11px;text-align:center;background-color:transparent;color:#fff;font-family:helvetica;vertical-align:middle;</style> </head><body><b>Updated</b> 10/11/12 <b>11:09</b> AM</body></html>"];
[myWebView loadHTMLString:html baseURL:baseURL];

Details

  • Xcode 10.2.1 (10E1001), Swift 5

Voll Probe

import UIKit

class ViewController: UIViewController {

    private weak var toolBar: UIToolbar?

    override func viewDidLoad() {
        super.viewDidLoad()

        var bounds =  UIScreen.main.bounds
        let bottomBarWithHeight = CGFloat(44)
        bounds.origin.y = bounds.height - bottomBarWithHeight
        bounds.size.height = bottomBarWithHeight
        let toolBar = UIToolbar(frame: bounds)
        view.addSubview(toolBar)

        var buttons = [UIBarButtonItem]()
        buttons.append(UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(ViewController.action)))
        buttons.append(UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: #selector(ViewController.action)))
        buttons.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil))
        buttons.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil))
        buttons.append(ToolBarTitleItem(text: "\(NSDate())", font: .systemFont(ofSize: 12), color: .lightGray))
        buttons.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil))
        buttons.append(UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action:  #selector(ViewController.action)))
        toolBar.items = buttons

        self.toolBar = toolBar
    }
    @objc func action() { print("action") }
}

class ToolBarTitleItem: UIBarButtonItem {

    init(text: String, font: UIFont, color: UIColor) {
        let label =  UILabel(frame: UIScreen.main.bounds)
        label.text = text
        label.sizeToFit()
        label.font = font
        label.textColor = color
        label.textAlignment = .center
        super.init()
        customView = label
    }
    required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
}

Ergebnis

Wenn Sie die Symbolleiste Ansicht, die einen Blick bis zum Hinzufügen Sie diese ausprobieren können:

[self.navigationController.tabBarController.view addSubview:yourView];

Versuchen Sie folgendes:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(140 , 0, 50, 250)];
[label setBackgroundColor:[UIColor clearColor]];
label.text = @"TEXT";
UIView *view = (UIView *) label;
[self.barItem setCustomView:view];

Hinweis: self.barItem ist ein UIBarButtonItem aus der Objektbibliothek hinzugefügt und zwischen zwei flexible Räumen

.

eine andere Art und Weise ist es, die [self.barItem setCustom:view] Linie zu entfernen und die Parameter der label (Breite) ändern, so dass sie die gesamte Werkzeugleiste füllt und stellen Sie die Ausrichtung auf mittlere und die Schrift selbst in Code,

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