我需要在Swift项目中自定义后退按钮的外观.
我已经尝试创建自己的UIBarButtonItem,但我无法弄清楚如何将图像放在文本旁边,而不是作为文本的背景或替代.
let backButton = UIBarButtonItem(title: "Custom", style: .Plain, target: self, action: nil )
//backButton.image = UIImage(named: "imageName") //Replaces title
backButton.setBackgroundImage(UIImage(named: "imageName"), forState: .Normal, barMetrics: .Default) // Stretches image
navigationItem.setLeftBarButtonItem(backButton, animated: false)
Run Code Online (Sandbox Code Playgroud) 我正试图显示/隐藏一个UIBarButtonItem.我barButton在右边添加了一个storyboard.然后在viewDidLoad,我做了rightBarButtonItem到nil.后来,我把它设置为button我添加的storyboard.这是我的代码:
// Right barButtonItem added in storybord:
@IBOutlet weak var deleteBarButton: UIBarButtonItem!
// viewDidLoad
self.navigationItem.rightBarButtonItem = nil
// Later on...
self.navigationItem.rightBarButtonItem = self.deleteBarButton
Run Code Online (Sandbox Code Playgroud)
当我设置self.deleteBarButton为rightBarButtonItem,没有任何反应.它没有显示出来.我做错了什么,显示/隐藏一个正确/最有效的方法是barButtonItem什么?
更新
我尝试了以下方法:
self.deleteBarButton.hidden = true
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
UIBarButtonItem没有名为'hidden'的成员
问题
在我的iPad应用程序中,仅在按下并保持事件后才能将弹出窗口附加到按钮栏项目.但这似乎是撤消/重做的标准.其他应用程序如何做到这一点?
背景
我的UIKit(iPad)应用程序的工具栏中有一个撤消按钮(UIBarButtonSystemItemUndo).当我按下撤销按钮时,它会触发它的动作,即undo:,并且正确执行.
然而,在iPad上撤消/重做的"标准UE惯例"是按下撤销执行撤消,但按住按钮会显示一个弹出控制器,用户选择"撤消"或"重做"直到控制器被解除.
附加弹出控制器的常规方法是使用presentPopoverFromBarButtonItem:,我可以很容易地配置它.要仅在按住之后显示此内容,我们必须设置视图以响应"长按"手势事件,如此代码段中所示:
UILongPressGestureRecognizer *longPressOnUndoGesture = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPressOnUndoGesture:)];
//Broken because there is no customView in a UIBarButtonSystemItemUndo item
[self.undoButtonItem.customView addGestureRecognizer:longPressOnUndoGesture];
[longPressOnUndoGesture release];
Run Code Online (Sandbox Code Playgroud)
有了这个,在按下并保持视图后,方法handleLongPressOnUndoGesture:将被调用,在这个方法中,我将配置并显示undo/redo的popover.到现在为止还挺好.
这个问题是没有附加视图.self.undoButtonItem是一个UIButtonBarItem,而不是一个视图.
可能的解决方案
1)[理想] 将手势识别器附加到按钮栏项目.可以将手势识别器附加到视图,但UIButtonBarItem不是视图.它确实具有.customView的属性,但当buttonbaritem是标准系统类型时(在这种情况下它是),该属性为nil.
2)使用另一个视图.我可以使用UIToolbar,但这需要一些奇怪的命中测试,并且如果可能的话首先是一个全面的黑客攻击.我无法想到使用其他替代视图.
3)使用customView属性.像UIBarButtonSystemItemUndo这样的标准类型没有customView(它是nil).设置customView将删除它需要的标准内容.这将相当于重新实现UIBarButtonSystemItemUndo的所有外观和功能,如果可能的话.
题
如何将手势识别器附加到此"按钮"?更具体地说,如何在iPad应用程序中实现标准的按住 - 显示 - 重做 - 弹出窗口?
想法?非常感谢,特别是如果有人真的在他们的应用程序中工作(我在想你,omni)并想分享......
cocoa-touch undo-redo uibarbuttonitem ipad uigesturerecognizer
当我将UISearchBar放入Interface Builder中的视图中,并将其样式更改为Black Opaque时,取消按钮保持不合适的蓝色/灰色并且不会变为黑色.
如何将取消按钮设为黑色?
编辑:它确实像这样工作:
// Assume a UISearchBar searchBar.
NSArray *subviews = [searchBar subviews];
// The index depends on how you configure the searchBar.
UIButton *cancelButton = [subviews objectAtIndex:3];
// Set the style to "normal" style.
[cancelButton setStyle:0];
Run Code Online (Sandbox Code Playgroud)
但该setStyle:方法来自私有框架,因此在向Apple提交应用程序时可能会出现问题.
cocoa-touch background-color uibarbuttonitem uisearchbar ios
我需要在导航栏中隐藏右键,然后在用户选择一些选项后取消隐藏它.
不幸的是,以下不起作用:
NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES; // FOO CODE
Run Code Online (Sandbox Code Playgroud)
有办法吗?
当我尝试将图像用于UIBarButtonItem时,不显示文本.有没有办法显示文字和图像?
我找不到在自定义UIBarButtonItem中设置标题字体大小的方法.我能想到解决这个问题的唯一方法是将其设置为我想避免的图像.还有其他建议吗?
我-(void)setEditing:(BOOL)editing animated:(BOOL)animated在我的代码中调用方法来交换导航栏RHS上的两个按钮.
-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
// Toggle ‘+’ and ‘Add To Order’ button.
if( editing ) {
self.navigationItem.rightBarButtonItem = self.addItemButton;
}
else {
self.navigationItem.rightBarButtonItem = self.addToOrderButton;
}
}
Run Code Online (Sandbox Code Playgroud)
其中self.addItemButton和self.addToOrderButton是包含预定义UIBarButtonItems的ivars,设置为awakefromNib.
中的按钮self.addToOrderButton明显宽于中self.addItemButton,因此当触发编辑状态的更改时(通过点击editButtonItem导航LHS上的标准),我希望它们是两个宽度之间的微妙动画.
如果我周围全if:else用[UIView beginAnimations:nil context:NULL];和[UIView commitAnimations];按钮更改确实动画,但他们从左上角,而不是替代的位置,飞入个别地方,只是动画它们的宽度.
我如何设置导航栏元素的动画,以便每个人(RHS按钮,标题)以更恰当,更有限的方式生成动画?
希望有人可以帮助我 - 我在网上搜索答案,但找不到 -
添加到UINavigationBar的UIBarButtonItem具有比所需更大的点击区域 - 例如,打开任何项目,你有一个带按钮的导航栏,点击按钮结尾和导航栏标题之间的任意位置 - 按钮点击,当你明显没有点击按钮时 -
也可以尝试这一点 - 点击导航栏下方,按钮下方,按钮点击导航栏下方约5个像素 -
我的问题是这个 -
我已经增加了一个自定义首部和按钮,用于一个tableview-但是当我点击标题中的按钮,所述按钮UINavigationBar的触发对那些5+像素代替按钮在tableview中报头 -
我做了一个测试,并从UINavigationBar中删除了按钮,有趣的是,对于导航栏下方的5个像素,即使导航栏中没有按钮,标题中的按钮也不会触发 -
它几乎像导航栏一样保留了低于其自身的5个像素作为点击空间 -
我的问题是这个 -
有人可以告诉我如何使导航栏没有为其按钮抓取额外的5+像素?
非常感谢 ;)
我有一个我从故事板链接到的IBOutlet
@IBOutlet var creeLigueBouton: UIBarButtonItem!
Run Code Online (Sandbox Code Playgroud)
如果条件成立,我想让它消失
if(condition == true)
{
// Make it disappear
}
Run Code Online (Sandbox Code Playgroud) uibarbuttonitem ×10
ios ×5
cocoa-touch ×3
iphone ×3
swift ×3
objective-c ×2
animation ×1
font-size ×1
iboutlet ×1
ipad ×1
uikit ×1
uisearchbar ×1
undo-redo ×1