2010-05-17 7 views
2

Мне просто интересно, можно ли добавить UIButton и/или значок в строку заголовка UINavigationControllers?add uibutton to navigationController title bar iphone

Я спрашиваю, потому что я ищу постоянную позицию для отображения кнопки «about».

ответ

7

Вы можете сделать это с помощью метода viewDidLoad контроллера вида:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem* infoButton = [[UIBarButtonItem alloc] initWithTitle:@"Info" 
                    style:UIBarButtonItemStylePlain 
                    target:self 
                    action:@selector(infoButtonSelected:)]; 
    self.navigationItem.rightBarButtonItem = infoButton; 
    [infoButton release]; 
} 

В примере о том, когда кнопка прослушиваются, вы также должны иметь метод:

- (void)infoButtonSelected:(id)sender { 
     NSLog(@"button tapped"); 
     // whatever needs to happen when button is tapped 
} 
+0

Пример, который вы дали, является совершенным. Большое спасибо! – dubbeat

0

Вы добавляете его к текущему контроллеру navigationItem. Он имеет свойства leftBarButtonItem и rightBarButtonItem.

0
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems: 
    [NSArray arrayWithObjects: 
     [UIImage imageNamed:@"change frame btn.png"], 
     [UIImage imageNamed:@"im.jpeg"], 
     //[UIImage imageNamed:@"im.jpeg"], 
     nil]]; 

    [segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; 
    segmentedControl.frame = CGRectMake(0, 0, 150, 30); 
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    segmentedControl.momentary = YES; 

    UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 
    [segmentedControl release]; 

    self.navigationItem.rightBarButtonItem = segmentBarItem; 
    [segmentBarItem release]; 
} 

- (void)segmentAction:(id)sender{ 

    if([sender selectedSegmentIndex] == 0) 
    { 
    } 
    if([sender selectedSegmentIndex] == 1) 
    { 
    } 
+0

привет, не могли бы вы переформатировать свой код, чтобы я мог его правильно прочитать? :) – dubbeat

0

navigationBar - это просто UIView, поэтому вы можете просто создать UIButton и addSubview. это должно быть viewDidAppear NOT viewdidLoad.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 


    // this must be AFTER The animation - otherwise it wont appear in the right spot 
    int xpos=self.navigationController.navigationBar.frame.size.width/2+60; 
    _toggleOnDeviceButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [_toggleOnDeviceButton addTarget:self action:@selector(toggleButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [_toggleOnDeviceButton setFrame:CGRectMake(xpos,2,40,40)]; 
    [_toggleOnDeviceButton setImage:[UIImage imageNamed:@"blank_button.png"] forState:UIControlStateNormal]; 
    [_toggleOnDeviceButton setTitle:@"Go" forState:UIControlStateNormal]; 
    _toggleOnDeviceButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; 
    [self.navigationController.navigationBar addSubview:_toggleOnDeviceButton]; 

}