Helpex - Trao đổi & giúp đỡ Đăng nhập
18

Tôi đang gặp vấn đề với a UIBarButtonItem. Tôi sử dụng proxy xuất hiện để thiết lập màu sắc của nó cho các quốc gia NormalDisabledvà tôi làm điều này trong các viewDidLoadphương pháp của UIViewController. Tuy nhiên, nút có Normalmàu sắc, ngay cả khi nó bị vô hiệu hóa (và nó chắc chắn bị vô hiệu hóa vì IBActionphương thức không được gọi).

Câu hỏi tương tự như này một màu văn bản của uibarbuttonitem bị vô hiệu hóa luôn là màu ở trạng thái bình thường , tuy nhiên, giải pháp được đăng ở đây không phù hợp với tôi.

Ứng dụng của tôi dành cho iOS 8.2 và tôi đang sử dụng Xcode 6.2

Có ý kiến ​​gì không?

CHỈNH SỬA : Tôi không chắc liệu điều này có hữu ích cho việc tìm giải pháp hay không, nhưng khi tôi tạo nút của mình bằng cách sử dụng initWithImage:thay vì initWithTitle:mọi thứ dường như hoạt động tốt. Đây có thể là một lỗi của Apple?

18 hữu ích 2 bình luận 11k xem chia sẻ
36

Swift 4

Nếu ai đó đang tìm cách thay đổi giao diện trạng thái bị vô hiệu hóa barbuttonitem nhanh chóng. Của bạn đây.

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.lightGray], for: .disabled)
36 hữu ích 2 bình luận chia sẻ
7

Kiểm tra với sau đây code.

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem * btnTemp = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(btnDone_Click:)];
    [btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor lightGrayColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:16.0f]} forState:UIControlStateNormal];

    [btnTemp setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor], NSFontAttributeName:[UIFont systemFontOfSize:16.0f]} forState:UIControlStateDisabled];

    [self.navigationItem setRightBarButtonItem:btnTemp];

}

- (void)btnDone_Click : (id)sender {

    UIBarButtonItem * button = (UIBarButtonItem *)sender;
    [button setEnabled:FALSE];
    [self performSelector:@selector(enableButton:) withObject:sender afterDelay:2.0f];


}

- (void)enableButton : (id)sender {
    UIBarButtonItem * button = (UIBarButtonItem *)sender;
    [button setEnabled:TRUE];
}
7 hữu ích 2 bình luận chia sẻ
5

Vì vậy, cuối cùng tôi đã quản lý để làm cho điều này hoạt động như bình thường và vấn đề là tôi đã thiết lập màu sắc của UIBarButtonItems hai lần, một lần bằng cách sử dụng [navBar setTintColor:] và một lần bằng cách sử dụng proxy giao diện. Chỉ để lại proxy xuất hiện sẽ giải quyết được vấn đề.

5 hữu ích 1 bình luận chia sẻ
2

Bạn có thể đã đặt thuộc tính văn bản tiêu đề mục nút thanh cho .Normaltrạng thái và cũng cần đặt nó cho .Disabledtrạng thái.

Có hai cách để khắc phục điều này, một nếu bạn đang đặt thuộc tính văn bản tiêu đề trên phiên bản mục nút thanh và trong trường hợp khác nếu bạn sử dụng proxy giao diện.

Trường hợp duy nhất:

saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)

Proxy giao diện:

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([MyNavigationController.self]).setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState: .Disabled)
2 hữu ích 1 bình luận chia sẻ
1

Điều này cập nhật câu trả lời cho Swift 4.0 :

barButtonItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: UIControlState.disabled)

Điều này cho thấy một ví dụ minh họa về màu cam bị vô hiệu hóa so với thanh màu trắng

UIBarButtonItem bị tắt, nhưng có màu bình thường

barTintColor = .white    
cancelButton.isEnabled = false
cancelButton.setTitleTextAttributes(
    [NSAttributedStringKey.foregroundColor: UIColor.orange], 
    for: UIControlState.disabled)
1 hữu ích 0 bình luận chia sẻ
0

Đây cũng là vấn đề của tôi, khi chạy trên phiên bản iOS 10. *. Đặt màu nền trước của nút đã giải quyết được vấn đề cho tôi.

self.saveButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.gray], for: UIControlState.disabled)
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ ios objective-c uibarbuttonitem , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading