如何向在 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 添加操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GNU Make 中以编程方式定义目标?

如何在 Swift 中以编程方式将 UILabel 对象居中?

如何在 Quarkus 中以编程方式注册 bean?

如何在 ios 中以编程方式添加约束

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?

如何在 MAC 中以编程方式设置 *** 连接?