在导航栏上添加自定义视图

时间:2011-12-09 09:20:48

标签: objective-c ios ipad uinavigationbar

这是我的代码。

- (void)viewWillAppear:(BOOL)animated
{

    customView = [[UIView alloc] init];

    UIButton *btnAdd = [[UIButton alloc] initWithFrame:CGRectMake(410, -20, 30, 40)];
    [btnAdd setBackgroundColor:[UIColor blackColor]];
    [btnAdd setBackgroundImage:[UIImage imageNamed:@"oie_815362uTrAOBMX.png"] forState:UIControlStateNormal];
    [btnAdd addTarget:nil action:@selector(addCustomer:) forControlEvents:UIControlEventTouchUpInside];
    [customView addSubview:btnAdd];

    UIButton *btnJump = [[UIButton alloc] initWithFrame:CGRectMake(450, -20, 30, 40)];
    [btnJump setBackgroundColor:[UIColor blueColor]];
    [btnJump setBackgroundImage:[UIImage imageNamed:@"oie_8153842yVgkR6XD.jpg"] forState:UIControlStateNormal];
    [btnJump addTarget:nil action:@selector(showMenue:) forControlEvents:UIControlEventTouchUpInside];
    [customView addSubview:btnJump];

    UIButton *btnBarItem = [[UIButton alloc] initWithFrame:CGRectMake(300, -20, 100, 40)];
    [btnBarItem setBackgroundColor:[UIColor greenColor]];
    [btnBarItem setBackgroundImage:[UIImage imageNamed:@"oie_99342oliBc5Sy.jpg"] forState:UIControlStateNormal];
    [btnBarItem addTarget:nil action:@selector(showScanner:) forControlEvents:UIControlEventTouchUpInside];
    [customView addSubview:btnBarItem];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, -10, 30, 30)];
    [imageView setImage:[UIImage imageNamed:@"oie_972931iW4SHiZU.jpg"]];
    [customView addSubview:imageView];

    UILabel *mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, -20, 80, 40)];
    [mainLabel setText:@"Kunden"];
    [mainLabel setBackgroundColor:[UIColor lightGrayColor]];
    [mainLabel setTextColor:[UIColor blackColor]];
    [mainLabel setFont:[UIFont fontWithName:@"Arial" size:18]];
    [customView addSubview:mainLabel];

    [self.navigationItem setTitleView:customView];
}

- (IBAction)showMenue:(id)sender
{
    NewPopUpmenu *options = [[NewPopUpmenu alloc] initWithNibName:@"PopupMenu" bundle:nil];
    [options.view setFrame:CGRectMake(720, 0, 300, 200)];
    [self.view addSubview:options.view];
}

注意:问题是,当我按下“跳转”按钮时,它不会访问它的选择器方法(showMenue :)。

1 个答案:

答案 0 :(得分:3)

您为每个按钮的目标 - 动作对指定了nil的目标。如果您的操作方法在同一个班级中实施,则target应为self

[btnAdd addTarget:self
           action:@selector(addCustomer:)
 forControlEvents:UIControlEventTouchUpInside];
// ...
// Same for other buttons...
// ...

从技术上讲,如果为nil参数指定target,则会在响应程序链中搜索响应该操作的对象。您遇到的问题可能是因为您的showeMenu:方法不是您的操作所期望的签名。该操作正在寻找一个如下所示的方法签名:

- (void)showeMenu:(id)sender;

但是您已在实现中指定了IBAction返回类型。