2010-06-16 15 views
10

Trong IB, tôi có thể đặt mã định danh của UIBarButtonItem thành 'phát' để thêm hình ảnh của nút phát (hình tam giác bên phải).Thay đổi (không phải init) một định danh UIBarButtonItem lập trình?

Có cách nào để thay đổi hình ảnh này theo chương trình không? Tôi muốn thay đổi nó thành 'tạm dừng' khi nhấn nút phát.

Tôi biết bạn có thể khởi tạo UIBarButtonItem bằng mã định danh nhưng tôi chưa tìm cách thay đổi nó sau khi nó được khởi tạo. Điều này thậm chí có thể?

Điều duy nhất tôi có thể nghĩ là loại bỏ nút cũ và khởi tạo một cái mới ở vị trí của nó, nhưng điều này hầu như không hiệu quả.

Mọi suy nghĩ?

Trả lời

14

Ok tôi đã googled câu hỏi này cho đến chết và chạy vào sample code from Apple nơi chúng thực hiện chính xác điều tương tự (bật/tắt nút đồ họa trên nút thanh công cụ). Nhưng thay vì sử dụng tính năng phát trong trò chơi và tạm dừng số nhận dạng của UIBarButtonItem, họ sử dụng tùy chỉnh UIButton và chuyển đổi hình ảnh tùy chỉnh. Vì vậy, nếu Apple gặp rắc rối khi tạo và chuyển đổi hình ảnh tùy chỉnh trên UIButton thay vì các nút được xây dựng trong trò chơi và tạm dừng UIBarButtonItem thì tôi cho rằng không có cách nào để thay đổi mã định danh của một số UIBarButtonItem.

Đây là những gì họ (Apple) làm gì để chuyển đổi hình ảnh khi nút được nhấn:

// Call this when the button you want to toggle is pressed: 
[playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal]; 

Thay p.playing với bất cứ điều gì BOOL bạn muốn giữ trạng thái của nút bấm của bạn. playButton là tùy chỉnh UIButton trong thanh công cụ. pauseBtnBGplayBtnBG là hình ảnh để chuyển đổi.

13

Điều này dường như làm việc khá tốt:

UIBarButtonItem *oldButton = [myToolBar.items objectAtIndex:1]; 
[myToolBar setItems:[NSArray arrayWithObjects:[myToolBar objectAtIndex:0], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(tapStopRefreshButton:)],nil] animated:NO]; 
[oldButton release]; 

Trong ví dụ này tôi đã có một thanh công cụ cho một UIWebView và khi ai đó nhấp Nạp lại tôi muốn nó phải thay đổi để Stop. Thanh công cụ chỉ có một không gian linh hoạt và một nút trên đó - để căn phải nút - vì vậy tôi đã lấy một tham chiếu đến nút cũ, tạo một nút mới có cùng bộ chọn như cũ, đặt lại các nút trên thanh tab và sau đó nhả nút gốc.

Không đẹp nhất, nhưng bạn có thể sử dụng tất cả các nút tiêu chuẩn mà không phải ghi đè lên (các) nút nút.

+0

Apple thực hiện việc này trong ví dụ StitchedStreamPlayer: http://developer.apple.com/library/ios/#samplecode/StitchedStreamPlayer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010092 – pablasso

+0

Mặc dù về mặt kỹ thuật không phải là ' thay đổi 'UIBarButtonSystemItem' thành OP sau, câu trả lời này cho phép * thay thế * của một mục hệ thống với một mục khác. –

+0

Mặc dù, trong ví dụ này, 'UIBarButtonItem' mới sẽ được khởi tạo trước khi được đưa vào mảng, vì vậy nó có thể được phát hành đúng cách. –

0

Còn 2 thanh công cụ xếp chồng lên nhau thì sao? Sau đó, bạn có thể có một số nút hệ thống ở trên cùng và một số nút ở dưới cùng. Nếu nút phát được nhấn, thì chỉ cần ẩn thanh công cụ trên cùng.

+0

Anh ấy đang tìm cách thay đổi hình ảnh hoặc hoán đổi nút, không có thanh công cụ biến mất. – JoshDM

+0

@JoshDM Tuy nhiên, nếu thanh công cụ biến mất, nút được hiển thị cho người dùng sẽ thay đổi. Hơn nữa, trong những trường hợp này bình thường bạn không có một, nhưng một tập hợp các nút mà bạn phải thay đổi vì vậy tôi thấy dễ dàng hơn để có hai thanh công cụ khác nhau với UIBarButtonItem chuẩn thay vì tạo và chuyển đổi UIButtons tùy chỉnh. Cũng dễ dàng hơn để 'ẩn' chế độ xem. Nhưng bạn đúng không phải là câu trả lời cho câu hỏi, đó là câu trả lời cho vấn đề của người hỏi. – FranMowinckel

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