UINavigationBar BarButtonItem with Plain Style

前端 未结 8 2190
不思量自难忘°
不思量自难忘° 2020-12-14 09:19

i got the following code:

- (id)init {
  if (self = [super init]) {
      self.title = @\"please wait\";
      UIBarButtonItem *favorite = [[UIBarButtonItem          


        
相关标签:
8条回答
  • 2020-12-14 09:26

    Or do this in code without IB:

    // add setting button to nav bar
    UIImage* settingsGearImg = [UIImage imageNamed:@"settings_gear.png"];
    CGRect frameimg = CGRectMake(0, 0, settingsGearImg.size.width, settingsGearImg.size.height);
    UIButton *settingsButton = [[UIButton alloc] initWithFrame:frameimg];
    [settingsButton setBackgroundImage:settingsGearImg forState:UIControlStateNormal];
    [settingsButton addTarget:self action:@selector(settingsButtonAction) forControlEvents:UIControlEventTouchUpInside];
    [settingsButton setShowsTouchWhenHighlighted:YES];
    UIBarButtonItem *settingButtonItem =[[UIBarButtonItem alloc] initWithCustomView:settingsButton];
    self.navigationItem.leftBarButtonItem = settingButtonItem;
    

    Results in:

    enter image description here

    When using this icon image (it's white on a white background so isn't visible here - link is: http://i.stack.imgur.com/lk5SB.png): enter image description here

    0 讨论(0)
  • 2020-12-14 09:27

    Try this instead:

    - (id)init {
      if (self = [super init]) {
          self.title = @"please wait";
    
          UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
          [button setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateNormal];
          [button addTarget:self action:@selector(buttonFavoriteClicked) forControlEvents:UIControlEventTouchUpInside];
          UIBarButtonItem *favorite = [[UIBarButtonItem alloc] initWithCustomView:button];
          [button release];
    
          self.navigationItem.rightBarButtonItem = favorite;
      }
    
      return self;
    }
    

    Hope it helps.

    0 讨论(0)
  • 2020-12-14 09:32

    Create a UIButton in interface builder, make it look like exactly what you want. Create an outlet for in in your .h:

    IBOutlet UIButton * _myButton;
    

    Then set it as your right bar button item using a custom view, which will eliminate the border:

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_myButton];
    

    This works because UIButton is a subclass of UIView.

    0 讨论(0)
  • 2020-12-14 09:37

    It's weird but it works. Say "No" to images/outlets! You shouldn't even set the UIBarButtonItemStylePlain property. The trick is to place button into UIToolBar with some special attributes:

    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Cool plain bar"];
    UIToolbar *tools = [[UIToolbar alloc]
                        initWithFrame:CGRectMake(0.0f, 0.0f, 44.0f, 44.01f)];
    tools.clipsToBounds = NO;
    tools.barStyle = -1; // clear background
    NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:1];
    UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshTableView)];
    [buttons addObject:bi];
    [tools setItems:buttons animated:NO];
    UIBarButtonItem *rightButtons = [[UIBarButtonItem alloc] initWithCustomView:tools];
    
    item.rightBarButtonItem = rightButtons;
    item.hidesBackButton = YES;
    [myCoolNavigationBar pushNavigationItem:item animated:NO];
    
    0 讨论(0)
  • 2020-12-14 09:37

    Try this,

    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"more.png"] style:UIBarButtonItemStylePlain target:self action:@selector(didPressButton)];
    
    0 讨论(0)
  • 2020-12-14 09:39

    Although Frank is right, this code should be in viewDidLoad, the issue here is what BarButtons look like. If you want it to look different, you need to use a different type of UIView. You can add a UIButton to a UIToolbar just fine.

    -(void)viewDidLoad {
      [super viewDidLoad];
      self.title = @"please wait";
      self.navigationItem.rightBarButtonItem = [[[UIButton alloc] init] autorelease];
    }
    

    Edit:

    Sorry, you wanted a plain UIBarButtonItem. I don't believe you can do this with a UINavigationBar. You could try adding a UserInteractionEnabled UILabel as the rightBarButtonItem, I'm not sure if it will work or not.

    Seems this isn't currently possible.
    sbwoodside has a solution.

    0 讨论(0)
提交回复
热议问题