[ios] UIToolbar에 UILabel 추가

내 도구 모음에 레이블을 추가하려고합니다. 버튼은 잘 작동하지만 라벨 객체를 추가하면 충돌이 발생합니다. 어떤 아이디어?

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];



답변

이것 좀 봐

[[UIBarButtonItem alloc] initWithCustomView:yourCustomView];

기본적으로 모든 항목은 “버튼”이어야하지만 필요한 모든보기로 인스턴스화 할 수 있습니다. 다음은 몇 가지 예제 코드입니다. 다른 버튼은 일반적으로 도구 모음에 있으므로 스페이서는 제목 버튼의 양쪽에 배치되어 중앙에 유지됩니다.

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];


답변

인터페이스 빌더를 사용하여를 레이아웃 UIToolBar하는 경우 인터페이스 빌더 만 사용하여이 작업을 수행 할 수도 있습니다.

를 추가하려면 UILabelA를 UIToolBar사용하면 일반적인 추가 할 필요가 UIView당신에 객체를 UIToolBar새로운 드래그하여 IB에 UIView당신을 통해 개체를 UIToolBar. 사용자 정의로 초기화 IB되는 UIBarButtonItem을 자동으로 만듭니다 UIView. 다음은 추가 UILabel받는 UIView및 편집 UILabel그래픽으로 선호하는 스타일에 맞게. 그런 다음 원하는대로 고정 및 / 또는 가변 스페이서를 시각적으로 설정하여 UILabel적절하게 배치 할 수 있습니다.

당신은 또한 모두의 배경 설정해야 UILabel하고,를 UIView위해 clearColor(가) 얻을 UIToolBar세 이하 제대로을 통해 보여 UILabel.


답변

answerBot의 답변이 매우 유용하다는 것을 알았지 만 Interface Builder에서 더 쉬운 방법을 찾은 것 같습니다.

  • UIBarButtonItem을 만들고 Interface Builder의 도구 모음에 추가합니다.

여기에 이미지 설명 입력

  • 이 BarButtonItem에 대해 “사용”을 선택 취소하십시오.

여기에 이미지 설명 입력

  • 이 BarButtonItem을 클래스의 속성에 연결합니다 (Swift에 있지만 Obj-C에서는 매우 유사합니다).

    @IBOutlet private weak var lastUpdateButton: UIBarButtonItem! // Dummy barButtonItem whose customView is lastUpdateLabel
  • Label 자체에 대한 다른 속성을 추가합니다.

    private var lastUpdateLabel = UILabel(frame: CGRectZero)
  • viewDidLoad에서 다음 코드를 추가하여 레이블의 속성을 설정하고 BarButtonItem의 customView로 추가합니다.

    // Dummy button containing the date of last update
    lastUpdateLabel.sizeToFit()
    lastUpdateLabel.backgroundColor = UIColor.clearColor()
    lastUpdateLabel.textAlignment = .Center
    lastUpdateButton.customView = lastUpdateLabel
  • UILabel텍스트 를 업데이트하려면 :

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

결과 :

여기에 이미지 설명 입력

lastUpdateLabel.sizetoFit()라벨 텍스트를 업데이트 할 때마다 전화해야 합니다.


답변

나는이 트릭을 사용하고있는 것들 중 하나는 인스턴스를하는 것입니다 UIActivityIndicatorView의 상단에 UIToolBar, 그렇지 않으면 가능하지 않을 것 인 무엇인가. 예를 들어 여기 UIToolBar에 2 UIBarButtonItem, a FlexibleSpaceBarButtonItem, 그리고 또 다른이 UIBarButtonItem있습니다. 나는를 삽입 할 UIActivityIndicatorViewUIToolBar유연한 공간과 최종 (오른쪽) 버튼을 사이에. 그래서 RootViewController나는 다음을 수행합니다.

- (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];}


답변

세부

  • Xcode 10.2.1 (10E1001), Swift 5

전체 샘플

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) }
}

결과

여기에 이미지 설명 입력


답변

Matt RI 사용 인터페이스 빌더와 유사합니다. 하지만 UIWebView내부에 1 개를 넣어서 일부 텍스트는 굵게 표시하고 다른 텍스트는 표시하지 않도록했습니다 (예 : 메일 앱). 그래서

  1. 대신 webview를 추가하십시오.
  2. 불투명 선택 취소
  3. 배경이 선명한 색상인지 확인
  4. 모든 것을 연결 IBOutlet
  5. 아래 html를 사용하여 투명한 배경을 사용하여 도구 모음이 빛나게합니다.

암호:

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];


답변

도구 모음보기에보기를 추가하려면 다음을 시도하십시오.

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