내 도구 모음에 레이블을 추가하려고합니다. 버튼은 잘 작동하지만 라벨 객체를 추가하면 충돌이 발생합니다. 어떤 아이디어?
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
하는 경우 인터페이스 빌더 만 사용하여이 작업을 수행 할 수도 있습니다.
를 추가하려면 UILabel
A를 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
있습니다. 나는를 삽입 할 UIActivityIndicatorView
에 UIToolBar
유연한 공간과 최종 (오른쪽) 버튼을 사이에. 그래서 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 개를 넣어서 일부 텍스트는 굵게 표시하고 다른 텍스트는 표시하지 않도록했습니다 (예 : 메일 앱). 그래서
- 대신 webview를 추가하십시오.
- 불투명 선택 취소
- 배경이 선명한 색상인지 확인
- 모든 것을 연결
IBOutlet
- 아래
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];