2015-05-21 208 views
1

我試圖創建以編程方式使用UINavigationItem setLeftBarButtonItemsetRightBarButtonItem將留在導航欄右側的UIBarButtonItem

我想有NavigationItem看起來像

[ < BACKTEXT  FWDTEXT > ] 

標準導航欄我想在我的圖像(箭頭)和設備邊緣之間保持一個恆定的空間。 我也想在圖像和文本之間有一個恆定的空間。

我創建了一個類別超過的UIBarButtonItem並增加了兩個方法backButtonWithfwdButtonWith

我讀@Split useful answer解釋瞭如何解決右鍵

button.titleEdgeInsets = UIEdgeInsetsMake(0, - button.imageView.frame.size.width, 0, button.imageView.frame.size.width); 
button.imageEdgeInsets = UIEdgeInsetsMake(0, button.titleLabel.frame.size.width, 0, -button.titleLabel.frame.size.width); 

但我很難解決後退按鈕。

這裏是我的代碼

- (UIBarButtonItem *)buttonWith:(BOOL) directionLeft title:(NSString *)title image:(UIImage *) buttonImage tintColor:(UIColor *)color target:(id)target andAction:(SEL)action{ 
    UIButton *barButton; 
    barButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    float buttonWidth = 130.0f; 
    [barButton setFrame:CGRectMake(0, 0, buttonWidth, 20.5f)]; 
    [barButton setTitle:title forState:UIControlStateNormal]; 
    [barButton setTitleColor:color forState:UIControlStateNormal]; 
    const CGFloat* components = CGColorGetComponents(color.CGColor); 
    [barButton setTitleColor:[UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:0.3f] forState:UIControlStateHighlighted]; 

    UIEdgeInsets titleEdgeInsets; 
    UIEdgeInsets imageEdgeInsets; 
    UIImage *image = [self image:buttonImage tintedWithColor:color fraction:0.0]; 
    [barButton setImage:image forState:UIControlStateNormal]; 
    [barButton setImage:[self image:image byApplyingAlpha:0.3] forState:UIControlStateHighlighted]; 

    [barButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 
    if(directionLeft == YES){ 
    titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);//THIS PARAMS SHOULD BE CONFIGURED 
    imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0); 
    }else{ 
     titleEdgeInsets = UIEdgeInsetsMake(0, -barButton.imageView.frame.size.width, 0, barButton.imageView.frame.size.width); 
     imageEdgeInsets = UIEdgeInsetsMake(0, barButton.titleLabel.frame.size.width, 0, -barButton.titleLabel.frame.size.width); 
    } 
    barButton.imageEdgeInsets = imageEdgeInsets; 
    barButton.titleEdgeInsets = titleEdgeInsets; 

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:barButton]; 
    return barButtonItem; 
} 

回答

0

您設置爲UINavigationItem出現在其推到導航欄的下一個導航項目的後退按鈕。您不會在當前導航項目中看到。另外,據我記得,後退按鈕不能夠包含自定義視圖,它應該是普通的UIBarButtonItem。

您可以自定義後退按鈕的外觀與

[UIBarButtonItem appearanceWhenContainedIn:<YourNavigationBar.class>] 

或一般外觀

[UIBarButtonItem appearance] 

有關後退按鈕項外觀定製的詳細信息,請查看本question