如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作
Posted
技术标签:
【中文标题】如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作【英文标题】:How to add action to a barbuttonitem in a navcontroller that was created programmatically within tabcontroller 【发布时间】:2013-02-26 20:50:23 【问题描述】:我尝试将 barbuttonitem 添加到 xcode 项目中,最后使用视图控制器显示它并将代码放在视图中确实加载部分,但我无法连接操作...我一直使用界面生成器和IBOutlets 但这不是一个选项,因为必须以编程方式放入此导航控制器才能使标签栏控制器工作
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//add navbar buttons progamatically b/c nothing to use in xibs...
UIBarButtonItem * popbutt = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(apopbuttonPressed:)];
UINavigationItem * navigItem = [[UINavigationItem alloc]initWithTitle:@"Scribbler"];
navigItem.rightBarButtonItem = popbutt;
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
这是我第一次尝试在不使用 IBOutlet 和界面构建器的情况下将操作组合在一起,所以我确信它看起来很糟糕,目标是使用 FPPopover 并让导航栏按钮项目在按下时显示一个弹出窗口
-(void)apopbuttonPressed
//the controller we want to present as popover
ScribblePopoverViewController * controller = [[ScribblePopoverViewController alloc] initWithStyle:UITableViewStylePlain];
controller.delegate = self;
apop = [[FPPopoverController alloc] initWithViewController:controller];
//apop.arrowDirection = FPPopoverArrowDirectionAny;
apop.tint = FPPopoverDefaultTint;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
apop.contentSize = CGSizeMake(300, 500);
else
apop.contentSize = CGSizeMake(200, 300);
apop.arrowDirection = FPPopoverArrowDirectionAny;
//sender is the UIButton view
// idk [apop presentPopoverFromView:];
【问题讨论】:
我试过这个,但在模拟器中按下按钮仍然没有响应 这是我的代码,它工作正常:- (void)viewDidLoad [super viewDidLoad]; NSLog(@"viewdidload"); // Do any additional setup after loading the view, typically from a nib. UIBarButtonItem * popbutt = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(apopbuttonPressed:)]; self.navigationItem.rightBarButtonItem = popbutt; - (void) apopbuttonPressed:(id) sender NSLog(@"pressed");
请看我编辑的答案..
非常感谢,我刚下班,我会试一试,我相信这会奏效。再次感谢
好的,我把它放进去,它正在记录按下,非常感谢,但现在我必须问我如何让它在确认按下按钮时显示弹出框
【参考方案1】:
你将选择器设置为 "apopbuttonPressed:"
您的方法是“apopbuttonPressed”,没有任何参数。
那就试试吧
action:@selector(apopbuttonPressed)
或将您的方法更改为
apopbuttonPressed:(id) sender
编辑:这是一个工作代码 sn-p:
这是我的代码,它工作正常:
- (void)viewDidLoad
[super viewDidLoad];
UIBarButtonItem * popbutt = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(apopbuttonPressed:)];
self.navigationItem.rightBarButtonItem = popbutt;
- (void) apopbuttonPressed:(id) sender
NSLog(@"pressed");
【讨论】:
以上是关于如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中以编程方式将 UILabel 对象居中?