6

Tôi đã gặp sự cố khi làm việc này, không có nơi nào tôi thấy một ví dụ hoạt động trên web. Bây giờ cung cấp tiền thưởng về điều này vì nó làm tôi phát điên. Nó sẽ được dễ dàng, nhưng điều đó dường như không phải là trường hợp.Thay đổi chế độ xem UIBarButtonItem để minh bạch theo chương trình

Tôi muốn các nút trên UINavigationBar của mình được nửa công khai sao cho chúng cho phép nền của bất kỳ nội dung nào trên UINavigationBar hiển thị. Hiệu ứng này được nhìn thấy trong nhiều ứng dụng, ví dụ hình ảnh dưới đây. Bạn có thể thực hiện việc này bằng cách đặt nền tùy chỉnh trên mục mà tôi nghĩ là giải pháp không được chấp nhận vì nó yêu cầu bạn chuẩn bị hình ảnh trước và chúng sẽ không thể thích ứng với các nút biến vv. không tin rằng có một lý do để làm điều này, UIKit đã vẽ nền cho các nút này, chúng ta chỉ cần thay đổi nó. Giải pháp chính xác sử dụng các mục thanh và lượt xem được tạo bởi apis của Apple.

UIBarButtonItem không phải là lớp con UIView. Khi bạn tạo một và thêm nó vào một UINavigationBar, một số mã ở đâu đó trong khung công tác sẽ vẽ một khung nhìn cho nó. Các phương pháp khuôn khổ dường như chống lại bất cứ điều gì liên quan đến việc cho phép minh bạch của các mục thanh, chẳng hạn như thuộc tính tintColor.

Ví dụ, điều này không làm việc:

UINavigationItem *item = [[UINavigationItem alloc] init]; 
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"SUCKS" style:UIBarButtonItemStyleBordered target:self action:@selector(whatever:)]; 
editButton.tintColor = [UIColor colorWithWhite:0.4 alpha:0.3]; 
item.leftBarButtonItem = editButton; 

Không có gì tôi làm sẽ làm cho UINavigationBar phép bán minh bạch cho các hạng mục quầy bar. Tôi tin rằng trong thời gian chạy chúng ta cần phải:

  1. Lấy hình ảnh cho mục thanh
  2. Mask nó cho minh bạch
  3. Đặt hình ảnh mới vào mục thanh

Nhưng tôi có không có thể nhận được hình ảnh khi chạy hoặc che dấu nó đúng cách. Làm thế nào để bạn làm điều này?

Like This

Trả lời

5

Tạo một UIView tùy chỉnh và vẽ một hình chữ nhật màu đen bán trong suốt trong nó và sử dụng rằng quan điểm với initWithCustomView.

see and

Nếu không được, bạn có thể phải sử dụng hình ảnh (png). ví dụ. một pixel p1 pixel 1x1 với opacity 30%. Sau đó, bạn có thể initWithImage.

EDIT: Tôi đã có cách tiếp cận thứ hai này làm việc sử dụng:

buttonThree = [[UIBarButtonItem alloc] initWithTitle:@" sort button " style:UIBarButtonItemStyleBordered target:self action:@selector(sortMethod)]; 
UIImage *thebgUIimage = [UIImage imageNamed:@"semi.png"]; 
[buttonThree setBackgroundImage:thebgUIimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Điều này dẫn đến một nút mà có một hình ảnh nền trong suốt mà hình nền navbar thể hiện qua. Tuy nhiên, bạn sẽ cần phải tạo ra một hình ảnh với các góc tròn trên và do đó cần một hình ảnh cho mỗi chiều rộng nút. Ngoài ra tôi đã tìm thấy this thread sau khi thử trên

+0

Tôi đang điều tra đề xuất của bạn, tôi không biết quá nhiều về Core Graphics nhưng các thư viện dường như ở mức độ thấp và cơ bản: IE không mạnh mẽ, trừ khi bạn biết làm thế nào để sử dụng họ IE: TẤN đọc, thực hành và học tập cần thiết. Trong hình ảnh ví dụ, có vẻ như hiệu ứng có thể đạt được với chế độ xem được làm tròn, bán mờ, nhưng cũng yêu cầu phải có đường viền xung quanh hình dạng. –

+0

Trừ khi bạn có một mẫu mã làm việc, tôi nghĩ rằng những gì bạn đề nghị về việc sử dụng một cái nhìn tùy chỉnh chứa một rect bán trong suốt ... không hoạt động. Alpha bị bỏ qua khi UIBarButtonItem với chế độ xem tùy chỉnh được thêm vào thanh điều hướng. –

+1

@ade bạn có thể tạo ra một hình ảnh có thể kéo giãn với các góc tròn và độ trong suốt, điều này sẽ làm việc cho tất cả các kích cỡ nút. Tôi nghĩ rằng đó có lẽ là những gì được yêu cầu ở đây. – jrturton

0

Thay vì tìm kiếm mã và phá vỡ đầu của bạn, đề xuất của tôi chỉ là có hình ảnh trong suốt có đường viền tương tự nút (thêm bóng nếu cần), tạo nút tùy chỉnh , thêm hình nền trong suốt vào nó và bạn có thể nhắn tin theo ý muốn. Từ nút tùy chỉnh này, hãy tạo mục nút thanh cho phù hợp.

+0

Xin cảm ơn. Ngoài việc tìm kiếm mã mẫu, tôi đã cố tự mình triển khai bằng bất kỳ phương thức hoặc thuộc tính nào trong tài liệu có vẻ liên quan. Cách tiếp cận mà bạn đề xuất có thể hoạt động để tạo nút nhưng sẽ không trông hoàn hảo nếu bạn tạo hình nền nút của riêng mình, nó cần giống giao diện người dùng táo. –

+0

Không, để tạo mục nút thanh, nó có phương pháp để sử dụng chế độ xem tùy chỉnh làm mục nút thanh. vì vậy bạn chỉ cần tạo một hình ảnh mà bạn muốn sử dụng làm mục nút thanh. đó là nó. – Satyam

0

Nếu bạn đang nhắm mục tiêu cho iOS 5, bạn có thể đặt hình nền của nút.

[_button setBackgroundImage:@"image" forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Lưu ý rằng bạn sẽ cần phải thiết lập hình ảnh nền cho nhà nước UIControlSateSelected và một lần nữa cho cả hai trạng thái điều khiển cho barMetrics: UIBarMetricsLandscape, nếu ứng dụng của bạn cho phép định hướng phong cảnh.

Lưu ý một lần nữa đây là tính năng iOS 5.

+0

Từ từ ngữ của câu hỏi ban đầu, điều này dường như không phải là cách tiếp cận "đúng" vì nó sẽ liên quan đến việc chuẩn bị nền hình ảnh "tùy chỉnh". Cá nhân, tôi sẽ thực tế sử dụng giải pháp này thay vào đó, nhưng hey, OP dường như biết tốt hơn và * muốn * một giải pháp chung chung hơn. – Till

+0

Vâng, đủ công bằng. Tôi đoán nếu anh ta không biết về giải pháp này, nó có thể hữu ích. –

+0

Xin chào các bạn, cảm ơn các câu trả lời. Đây là một cách tiếp cận tốt, nhưng hình ảnh để đặt là vấn đề ở đây. Photoshopping một số nền nút để tìm kinda đúng là không tốt, nó sẽ trông không táo và nghiệp dư. Tôi có thể không nói rõ ràng trong OP, nhưng thực sự có vẻ là cách tiếp cận đúng ở đây là GET hình ảnh từ mục được tạo bởi Apple và che giấu nó bằng cách nào đó để nó có độ trong suốt, sau đó đặt lại nó mục và có thể đảm bảo mọi thứ liên quan đến opaque = NO hoặc các tùy chọn liên quan đến độ trong suốt khác được đặt chính xác. –

2

Một hack tuyệt vời là sử dụng UISegmentedControl với một đoạn duy nhất (dưới dạng nút) và đặt màu sắc của nó. Hãy xem http://charles.lescampeurs.org/2011/02/10/tint-color-uibutton-and-uibarbuttonitem. Cá nhân tôi đã thực hiện điều này. Hãy hỏi bất kỳ câu hỏi nào.

+1

Vậy điều đó có mang lại hiệu quả mong muốn nếu bạn tô màu nó bằng màu bán trong suốt không? – jrturton

+0

. Thuộc tính tintColor được đặt hoàn hảo. – Akshay

+0

Điều này không có tác dụng, nó thay đổi màu tintColor nhưng alpha bị bỏ qua và không có độ trong suốt khi được thêm vào thanh điều hướng. Bạn nói thuộc tính tintColor được thiết lập, và chắc chắn bạn có thể thay đổi màu sắc, nhưng alpha là mục tiêu ở đây. –

0
+0

Đó là một bài viết về phương pháp nổi loạn để có được một hình nền trên UINavigationBar. Có thể được sử dụng để gọi mã trong các lớp không có giấy tờ mà không bị từ chối khi nộp cho Apple không? Tôi nghi ngờ nó, nhưng nếu như vậy, nó có thể này có thể làm việc. –

+0

vâng, tôi đã gửi một ứng dụng có mã này và nó hiện đã có trên kho ứng dụng;) –

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