我正在创建一个UIBarButtonItem并将其添加到我的导航栏,如下所示:
(void)viewDidLoad {
...
// Add the refresh button to the navigation bar
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setFrame:CGRectMake(0,0,30,30)];
[refreshButton setImage:[UIImage imageNamed:@"G_refresh_icon.png"] forState:UIControlStateNormal];
[refreshButton addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
self.navigationItem.leftBarButtonItem = refreshBarButton;
}
Run Code Online (Sandbox Code Playgroud)
它在我运行时看起来是正确的,但我可以通过点击导航栏从x = 0到大约100来选择条形按钮项目.如何调整可选区域的宽度为30像素?
我是初学的iPhone开发者.
如何以编程方式设置标题UIBarButtonItem?
我的代码如下:
self.navigationItem.rightBarButtonItems =
UIBarButtonItem(
barButtonSystemItem: .Cancel, target: self,
action: "barButtonItemClicked:")
@IBAction func barButtonItemClicked(sender: UIBarButtonItem) {
//print something
}
Run Code Online (Sandbox Code Playgroud) 我放弃了在UINavigationBar中UIInterfaceBuilder.我以模态方式呈现此视图,只想UIBackBarButton返回到我的上一个视图.我有一个出口和财产UINavigationBar声明.我想在我的viewDidLoad方法中,我可以创建一个UIBackButton这样的:
UIBarButtonItem *backButton =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
Run Code Online (Sandbox Code Playgroud)
但我没有看到我UIBackBarButtonItem的UINavigationBar.我想我在这里做错了,因为我不认为我UINavigationBar知道我试图以UIBackBarButtonItem这种方式添加它.我是否必须创建一个NSArray,将按钮放入其中,并为NavigationBar设置setItems?
我对navigationItem属性如何工作UINavigationBar以及对setItems感到困惑.任何帮助,将不胜感激.谢谢!
我有一个工具栏,如下所示:

问题是它有点混乱,因此我想为它添加一些间距.我试过做:
UIBarButtonItem *spacer =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
self.toolbar_array =
[[NSMutableArray alloc] initWithObjects:self.mention,
spacer,
self.picture,
spacer,
share,
spacer,
self.message, nil];
Run Code Online (Sandbox Code Playgroud)
但它仍然给了我同样的东西.如何在这些之间添加10px UIBarButtonItems?
我认为它并不严格符合Apple指南,但我想它必定是可能的.我想更改UINavigationController中导航栏的高度以及该栏内UIBarButtonItem元素的高度.
使用这个问题的技巧我设法改变导航栏的高度,但我看不到调整条形按钮项高度的方法.
如果有人知道如何更改条形按钮项的大小,请帮助我.
cocoa-touch uinavigationbar uinavigationcontroller uibarbuttonitem
我一直在使用此代码来更改导航栏中元素的色调:
UINavigationBar.appearance().tintColor = theme.labelColor
Run Code Online (Sandbox Code Playgroud)
但是,这不再适用于iOS 11.在iOS 11之前,导航栏中的按钮是UINavigationButtons,但在iOS 11中它们已被更改为_UIModernBarButton.我能够改变它们的色调颜色UIButton.appearance().tintcolor,但这会改变每个按钮的颜色.
这是一个比较:
更新01/09/2017:
看起来_UIButtonBarButton有正确的色调颜色,但_UIModernBarButton用颜色设置覆盖它UIButton.
更新18/09/2017:
"工程部就此问题提供了以下反馈:
UIView.tintColor不是外观选择器,特别是由于其继承属性而被记录为不能正常作为外观属性."
我创造了一个 UIActionSheet
UIActionSheet * action = [[UIActionSheet alloc]initWithTitle:@""
delegate:self
cancelButtonTitle: @"cancel"
destructiveButtonTitle: @"OK"
otherButtonTitles: nil];
[action showInView:self.view];
[action release];
Run Code Online (Sandbox Code Playgroud)
在取消按钮的事件中,UIActionSheet我想要触发一个事件UIBarButtonItem,这在我看来.
我的问题是如何在UIActionSheet委托方法中触发按钮事件(不触摸按钮)
所以我遇到了许多其他人在使用UIButton作为自定义视图创建UIBarButtonItem时遇到的相同问题.
基本上,按钮向左或向右约10像素到远.当我使用没有自定义视图的常规BarButtonItem时,这不会发生.
这篇文章提供了部分解决方案: UIBarButton With Custom View
这是我通过子类化UIButton创建的代码(如另一篇文章中所述)
- (UIEdgeInsets)alignmentRectInsets {
UIEdgeInsets insets;
if ([self isLeftButton]) {
insets = UIEdgeInsetsMake(0, 9.0f, 0, 0);
}
else { // IF ITS A RIGHT BUTTON
insets = UIEdgeInsetsMake(0, 0, 0, 9.0f);
}
return insets;
}
- (BOOL)isLeftButton {
return self.frame.origin.x < (self.superview.frame.size.width / 2);
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但当我从导航控制器弹出一个视图控制器回到这个主视图时,按钮仍然错误地定位了大约.3秒,然后它捕捉到正确的插图.
这是一个巨大的眼睛,我不知道如何阻止它像这样攫取.有什么想法吗?谢谢!
我在一个项目中注意到,由于某种原因,右侧栏按钮项目上的弹出框的位置似乎偏向右侧.我尝试使用UIButton作为自定义视图,然后从该按钮呈现弹出窗口,但是如果我实际上为它提供了'居中'值,则popover似乎忽略了showFromRect.

这背后的代码非常简单:
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"share"] style:UIBarButtonItemStylePlain target:self action:@selector(shareTap:)];
self.navigationItem.rightBarButtonItem = button;
}
- (void)shareTap:(UIBarButtonItem *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
[self.popover presentPopoverFromBarButtonItem:button permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我切换到使用内部按钮,如上所述,我看到类似的行为(注意颜色变化,因此图像显示).

这个代码仍然相当简单:
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *innerButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 22, 22)];
[innerButton setImage:[UIImage imageNamed:@"share"] forState:UIControlStateNormal];
[innerButton addTarget:self action:@selector(shareTap:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:innerButton];;
}
- (void)shareTap:(UIButton *)button {
self.popover = [[UIPopoverController alloc] initWithContentViewController:[[UIViewController alloc] init]];
// CGRect …Run Code Online (Sandbox Code Playgroud) 我正在尝试向所有键盘添加自定义UIToolBar,重复次数很少.我目前正在这样做的方式要求我将代码添加到我的所有viewDidLoads并将每个textfield的委托分配给我正在使用的viewController.我已经尝试创建自己的UIToolBar子类,但是当我的"完成"和"取消"按钮的目标是自我视图时,我发现我无法真正做到这一点.有没有人有任何关于创建一个易于重复使用的工具栏的建议?提前致谢.
override func viewDidLoad() {
super.viewDidLoad()
var toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.Default
toolBar.translucent = true
toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "donePressed")
var cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelPressed")
var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
toolBar.sizeToFit()
stateField.inputAccessoryView = toolBar
stateField.delegate = self
Run Code Online (Sandbox Code Playgroud) uibarbuttonitem ×10
ios ×6
iphone ×3
swift ×3
uibutton ×2
cocoa-touch ×1
events ×1
ios11 ×1
ios7 ×1
ipad ×1
objective-c ×1
repeat ×1
toolbaritems ×1
uitoolbar ×1