2013-03-01 91 views
7

我想添加一個「書籤」按鈕,我的導航欄作爲rightBarButtonItemsetImage方法改變的UIBarButtonItem寬度,即使圖像的大小沒有改變

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Add bookmark button 
    UIBarButtonItem *bookmarkBarButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:self action:@selector(bookmark:)]; 
    [bookmarkBarButton setImage:[UIImage imageNamed:@"greyBookmark.png"]]; 
    [self.navigationItem setRightBarButtonItem:bookmarkBarButton]; 
    bookmarkBarButton.tintColor = [UIColor colorWithRed:0.4 green:0.4 blue:0.4 alpha:0.9f]; 
    b_bookmarked = false; 
} 

// Will call this method when the bookmark button is pressed 
- (IBAction)bookmark:(id)sender 
{ 
    // Toggle color of bookmark icon on button 
    if ((b_bookmarked = !b_bookmarked)) 
    { 
     [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"blueBookmark.png"]]; 
    } 
    else 
    { 
     [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"greyBookmark.png"]]; 
    } 

    // Save bookmark 

} 

greyBookmark.png和blueBookmark.png都有10x26尺寸。出現視圖時,按鈕外觀變窄。但是當我點擊這個按鈕時,按鈕會變寬,但圖像仍然會改變。 在bookmark:method中調用setImage方法時,寬度發生變化(恢復爲默認大小)。我試圖通過調用[navigationItem.rightBarButtonItem setWidth:]顯式設置寬度 - 也沒有幫助。在此之前,根據文檔,width屬性被設置爲0,並且按鈕應該根據其圖像大小調整大小。

我想rightBarButtonItem有一個const寬度。 第二次調用setImage之後爲什麼會變寬?

回答

6
UIImage *myImage = [UIImage imageNamed:@"greyBookmark.png"]; 
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setImage:myImage forState:UIControlStateNormal]; 
myButton.showsTouchWhenHighlighted = YES; 
myButton.frame = CGRectMake(0.0, 3.0, 70,30); 
[myButton addTarget:self action:@selector(BookmarkButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *rightbutton = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 
self.navigationItem.rightBarButtonItem = rightbutton; 

將這個方法下viewDidLoad

-(void)BookmarkButtonPressed 

{ 

     //Do ur work here for Button Action 

} 
+0

哦,我明白了。所以你可以創建一個UIButton並將它用作BarButton。按鈕的寬度不再改變,這很好。但要改變圖像,我必須將barbuttonItem的customView投射到UIButton並調用setImageNamed:forState: – AzaFromKaza 2013-03-01 05:55:08

+0

對不起,不能投票,沒有足夠的代表。 投票我的問題,我會有足夠的聲望(15)投票你的答案。 – AzaFromKaza 2013-03-01 05:55:38