自定义导航栏按钮UIBarButtonItem 文字或图片

在4.0里定义导航条按钮通常是生成普通按钮,再用它生成导航条专用按钮。

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
 [button setBackgroundImage:[UIImage imageNamed:@"button_main.png"]
                                       forState:UIControlStateNormal];
 [button addTarget:self action:@selector(GotoSettings)
              forControlEvents:UIControlEventTouchUpInside];
 button.frame = CGRectMake(x, y, x1, x2);

 UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithCustomView:menu];
 self.navigationItem.rightBarButtonItem = menuButton;

 [button release];
 [menuButton release];

如果是在导航条一边创建多个button,在4.0里是通过segmentcontrol来间接实现

        UISegmentedControl *SegmentedControl = [[UISegmentedControl alloc] initWithItems:
                                                 [NSArray arrayWithObjects:
                                                  @"开始",
                                                  @"暂停", nil]];
        [SegmentedControl addTarget:self action:@selector(segmentAction:) 
                    forControlEvents:UIControlEventValueChanged];
        SegmentedControl.frame = CGRectMake(0, 0, 80, 30);
        SegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
        SegmentedControl.momentary = YES;
        SegmentedControl.tintColor = [UIColor colorWithHue:0.6 saturation:0.33 brightness:0.69 alpha:0];
        //defaultTintColor = [segmentedControl.tintColor retain];    // keep track of this for later
        UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] 
                                               initWithCustomView:SegmentedControl];
        self.navigationItem.rightBarButtonItem = segmentBarItem;

之后 通过Action方法判断是哪个button被按下

- (void)segmentAction:(id)sender
{
    
	//NSLog(@"segmentAction: selected segment = %d", [sender selectedSegmentIndex]);
    if ([sender selectedSegmentIndex] == 0) {
        //[self startAll];
        
    }else if ([sender selectedSegmentIndex] == 1) {
        //[self stopAll];
    }
    
}

在iOS 5.0中,导航条引入了新的方法 setLeftBarButtonItems:animated:和setRightBarButtonItems:animated:来直接定义左右侧的多个button,方便了许多

UIBarButtonItem *startBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(startDownloadAll)];
UIBarButtonItem *pauseBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(stopDownloadAll)];
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects: pauseBtn,startBtn,nil]];




你可能感兴趣的:(ios,action,button,menu)