2013-11-22 18 views
12

Trên appDidFinishLaunchingWithOptions, tôi tô màu toàn bộ ứng dụng của mình bằng mã sau.REALLY hành vi màu ứng dụng lạ?

self.window.tintColor = [UIColor otfRedColor]; 

Điều này hoạt động hoàn hảo và khi ứng dụng của tôi tải, tất cả các mục trên thanh điều hướng đều có màu đỏ. A là bộ điều khiển xem gốc của tôi.

Tôi có 3 bộ điều khiển chế độ xem, a, b và c. Một kéo lên một bảng xem trình bày phương thức của b mà kéo lên một cái nhìn đầy đủ phương thức của c. Khi C được kéo lên, các mục nút thanh trên thanh điều hướng đều có màu xám, điều này không nên xảy ra vì tôi không thay đổi bất kỳ màu hoặc màu nào theo bất kỳ cách nào sau khi ứng dụng ủy nhiệm màu cho cửa sổ. Sau đó, tôi sử dụng

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

để loại bỏ VC c và b, nhưng bây giờ ứng dụng ENTIRE của tôi có màu xám. Tôi đã không sử dụng bất kỳ mã màu nào cả kể từ khi đại biểu ứng dụng, tại sao điều này xảy ra? Khi tôi đi từ A đến B một lần nữa, các thanh điều hướng vẫn còn màu đỏ ???

Mã để kéo lên xem điều khiển B từ A:

AthleteAdd *addAthlete = [self.storyboard instantiateViewControllerWithIdentifier:@"addAthlete"]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addAthlete]; 
addAthlete.delegate = self; 
navigationController.modalPresentationStyle = UIModalPresentationFormSheet; 
[self presentViewController:navigationController animated:YES completion:nil]; 

Mã để kéo lên C từ B:

MedicalReleaseVC *medRelease = [self.storyboard instantiateViewControllerWithIdentifier:@"showMedRel"]; 
    medRelease.delegate = self; 
    [self presentViewController:medRelease animated:YES completion:nil]; 

Có ai biết tại sao điều này xảy ra, hoặc có một ý tưởng? Tôi đã thử nhuộm bộ điều khiển xem thứ ba dưới dạng 3 cách riêng biệt màu đỏ và nó vẫn còn màu xám, sau đó khi mọi thứ bị loại bỏ toàn bộ ứng dụng của tôi là màu xám. Hãy giúp tôi!!

EDIT:

Nếu nó giúp, cách tôi giải quyết vấn đề này là bằng cách thiết lập sau đây trong appdelegate.m tôi

self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

Trả lời

10

Tôi nghĩ rằng đây là một lỗi trong xử lý tintAdjustmentMode iOS7 khi mở và đóng các trang tính và cửa sổ bật lên. Tôi đã nhìn thấy lỗi này xảy ra trong ứng dụng thư gốc của Apple, nơi các mục nút thanh trở nên xám hoặc ngược lại, chúng không còn chuyển thành màu xám khi cửa sổ bật lên xuất hiện.

Để gỡ lỗi thêm, tôi khuyên bạn nên phân lớp một trong các chế độ xem của bạn (hoặc cửa sổ trực tiếp) và triển khai tintColorDidChange. Ghi lại giá trị tintAdjustmentMode tại đó. Tôi lo sợ đây là những gì đang gây ra các vấn đề màu xám của bạn.

Một giải pháp sẽ là bắt buộc UIViewTintAdjustmentModeNormal nhưng điều này sẽ có tác dụng không mờ khi mở cửa sổ bật lên hoặc trang tính.

+0

Bạn có thể minh họa cho các UIViewTintAdjustmentModeNormal xin vui lòng? –

+0

Tôi không chắc chắn 100% vì tôi không phải đối phó với một vấn đề như thế này, nhưng tôi nghĩ nếu bạn đặt nó thành UIViewTintAdjustmentModeNormal trong một trong các khung nhìn thay vì UIViewTintAdjustmentModeAutomatic, nó sẽ không chuyển từ bình thường sang mờ. Vì vậy, bạn về mặt lý thuyết có thể làm điều này trong cửa sổ. –

+2

Tôi đặt self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; trong ứng dụng của tôi, cố định tất cả các màu xám, và bằng cách nào đó chế độ xem phương thức của tôi vẫn làm mờ nền. Không có ý tưởng tại sao nó hoạt động, nhưng sẽ không chiến đấu với một điều tốt! –

1

Chỉ cần đặt

self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

trong viewDidLoad của bạn và màu sắc của bạn là trở lại bình thường.

+0

Tôi đặt nó vào lớp phát hành y tế của mình, nhưng mọi thứ đều xám khi nó bị loại bỏ. –

0

Chắc chắn có lỗi. Tôi nhận thấy rằng khi cửa sổ bật lên làm mờ cửa sổ khi nó xuất hiện nhưng sau khi tôi thay đổi keyWindow.tintAdjustmentMode theo cách thủ công (đối với các chế độ xem tùy chỉnh & bộ điều khiển chế độ xem), cửa sổ bật lên sẽ ngừng mờ mặc dù tôi tự động đặt lại keyWindow.tintAdjustmentMode.

3

tôi đã phải đặt

[[[UIApplication sharedApplication] keyWindow] setTintAdjustmentMode:UIViewTintAdjustmentModeNormal]; 

trong viewDidLoad tôi để giải quyết vấn đề này. Nhưng như đã đề cập trong các câu trả lời khác, nó có tác dụng phụ không làm mờ các mục nút thanh khi một cửa sổ bật lên bật lên.

0

Khi cửa sổ bật lên được hiển thị, chế độ xem chính của TintAdjustmentMode được đặt thành Dimmed. Điều này sẽ được đảo ngược khi cửa sổ bật lên bị đóng, nhưng khi bạn điều hướng đến màn hình mới từ cửa sổ bật lên, nó không xảy ra vì một số lý do.

Tôi đã sửa lỗi này trong UIViewController được hiển thị dưới dạng cửa sổ bật lên - ghi đè phương thức ViewWillDisappear và đặt TintAdjustmentMode trên chế độ xem của bộ điều khiển chế độ xem chính quay lại Normal. (Trong Xamarin, tôi đã sử dụng UIApplication.SharedApplication.KeyWindow.RootViewController.View.TintAdjustmentMode = UIViewTintAdjustmentMode.Normal với một vài kiểm tra cho giá trị rỗng trên đường đi.)

0

Một giải pháp khác là KHÔNG đặt màu cửa sổColor và thay vào đó sử dụng proxy xuất hiện khi thích hợp và đặt tintColor theo lập trình (hoặc trong Interface Builder) ở mọi nơi khác . Điều này có vẻ an toàn hơn là thiết lập cửa sổ toàn cục tintColor, điều này gợi lên hành vi lạ đặc biệt là sau khi các phương thức, cảnh báo hệ thống và các hành động bỏ qua.

Remove này:

self.window?.tintColor = UIColor.redColor() 

Thêm những:

UINavigationBar.appearance().barTintColor = UIColor.redColor() 
UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
UISegmentedControl.appearance().tintColor = UIColor.orangeColor()