2013-03-01 35 views
7

Tôi muốn thêm một nút "bookmark" để thanh điều hướng của tôi như là một rightBarButtonItemphương pháp setImage thay đổi chiều rộng UIBarButtonItem, ngay cả khi kích thước hình ảnh không thay đổi

- (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 

} 

cả greyBookmark.png và blueBookmark.png có 10x26 kích thước. Nút sẽ bị thu hẹp khi chế độ xem xuất hiện. Nhưng khi tôi nhấp vào nút này, nút được rộng hơn, hình ảnh vẫn thay đổi mặc dù. Thay đổi chiều rộng khi phương thức setImage được gọi trong dấu trang: phương thức (trở về kích thước mặc định). Tôi đã cố gắng thiết lập một cách rõ ràng chiều rộng bằng cách gọi [navigationItem.rightBarButtonItem setWidth:] - cũng không giúp được gì. Trước khi thực hiện điều đó, thuộc tính chiều rộng được đặt thành 0 và nút nên thay đổi kích thước tùy thuộc vào kích thước hình ảnh của nó, theo tài liệu.

Tôi muốn rightBarButtonItem có chiều rộng const. Có lý do nào khiến nó trở nên rộng hơn sau cuộc gọi thứ hai tới setImage không?

Trả lời

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; 

Đặt phương pháp này dưới viewDidLoad

-(void)BookmarkButtonPressed 

{ 

     //Do ur work here for Button Action 

} 
+0

Oh tôi nhìn thấy. Vì vậy, bạn có thể tạo một UIButton và sử dụng nó như một BarButton. Chiều rộng của nút không thay đổi nữa, điều đó tốt. Nhưng để thay đổi hình ảnh, tôi đã phải soạn customView của barbuttonItem thành UIButton và gọi setImageNamed: forState: – AzaFromKaza

+0

Xin lỗi, không thể bỏ phiếu, không đủ đại diện. Bỏ phiếu cho câu hỏi của tôi và tôi sẽ có đủ danh tiếng (15) để bỏ phiếu cho câu trả lời của bạn. – AzaFromKaza

Các vấn đề liên quan