2011-10-02 122 views
1

我已经分类了一个UINavigationBar。 NavigationBar有两个类型为UIBarButtonItem的按钮。可以移动这些按钮吗?例如,我想将“左键”右移50px,并将“右键”右移50px。UINavigationBar - 如何更改UIBarButtonItem的位置?

LayoutSubViews是移动这些按钮的正确位置吗?

这是导航栏类(在MT创建):

[MonoTouch.Foundation.Register("NavigationBar")] 
public class NavigationBar : UINavigationBar 
{ 
    public NavigationBar (IntPtr handle) : base (handle) 
    { 
     Initialize(); 
    } 

    [Export ("initWithCoder:")] 
    public NavigationBar (NSCoder coder) : base (coder) 
    { 
     Initialize(); 
    } 

    public NavigationBar(RectangleF frame, string title) : base (frame) 
    { 
     InitializeWithStyleAndTitle(title); 
    } 

    void Initialize() { } 

    void InitializeWithStyleAndTitle(string title) 
    { 
     //- title 
     UINavigationItem navItem = new UINavigationItem(title); 

     //- left button 
     UIBarButtonItem leftBarButtonItem = new UIBarButtonItem("back", UIBarButtonItemStyle.Plain, this, new Selector("backAction")); 
     navItem.LeftBarButtonItem = leftBarButtonItem; 

     //- right button 
     UIBarButtonItem rightBarButtonItem = new UIBarButtonItem("update", UIBarButtonItemStyle.Plain, this, new Selector("updateAction")); 
     navItem.RightBarButtonItem = rightBarButtonItem;  

     //- style 
     BarStyle = UIBarStyle.Black; 

     PushNavigationItem(navItem, false); 
    } 

    //- selectors omitted 
} 
+1

使用'UIToolBar'一个选择? – JustSid

+0

谢谢。我可以像UINavigationBar一样使用工具栏吗?在IB中,我已经看到该工具栏被“使用在屏幕的底部”。将UIToolbar放在顶部是正确的吗? –

+1

是的,你可以在页面顶部放置一个工具栏,这是完全可以接受的。当您需要返回到上一页/屏幕时进行多级表导航时,NavigationBars非常有用。 – Candide

回答

1

不,UINavigation有特定的行为,左,右仅按钮。如果需要定位按钮,则应该使用UIToolbar。在两者之间添加垫片以调整按钮的位置。

+0

谢谢。请看我的评论。 –

3

我设置自定义按钮的框架和放置该按钮在视图中

CustomButton *menu = [[CustomButton alloc] initWithFrame:CGRectMake(7, 3, 35, 35)]; 
[menu setImage:[UIImage imageNamed:@"sliding_drawer_white_icons"] forState:UIControlStateNormal]; 
UIView * menuButtonView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 46.0f, 40.0f)]; 
[menuButtonView addSubview:menu]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonView];