2010-06-30 12 views
13

właśnie przeszedł na iOS 4 na moim iPhone 3GS i niektóre z moich aplikacji się zepsuły.Odcień UIToolbar na iOS 4

Jedną z kwestii, którą miałem, było posiadanie paska UIToolbar z kilkoma przyciskami przyciemnionymi do różowego, który działał dobrze w systemie 3.1.3. Po aktualizacji do iOS 4 pasek narzędzi wciąż był przyciemniany, ale przyciski, które zawierał, nie były już odbarwione. Pasek narzędzi był różowy, a przyciski miały regularny niebieski kolor.

Rozglądałem się za tym w sieci, ale nie znalazłem żadnego odniesienia do takiej rzeczy.

Ktoś wie, co się zepsuło?

Odpowiedz

23

(musi być szczera tutaj - znałem odpowiedź przed wysłaniem, po prostu nie wiedziałem, jak załadować te dane do StackOverflow.) Myślałem, że rozwiązanie, które znalazłem, jest cenne dla innych, więc chciałem to opublikować tutaj. nowy tutaj, więc proszę nie ostro krytyków :))

Tak ostatecznie problem wynikał z AFAICT, zmiany w zachowaniu w systemie operacyjnym.

Jak podano kod odcień pracował przed uaktualnieniem i został napisany tak:

// Toolbar content    
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE 
[toolbar setItems:items]; 

// Add tint 
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5]; 

Co muszę zrobić, po prostu odwrócić kolejność rzeczy:

// Add tint 
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5]; 

// Toolbar content    
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE 
[toolbar setItems:items]; 

(jeżeli utworzony pasek narzędzi UIToolbar w narzędziu do tworzenia interfejsów, możesz zmienić jego odcień, który dotyczy również przycisków).

Podejrzewam, że odcień zaktualizował wszystkie przyciski przed iOS 4, podczas gdy w iOS 4 nie, a podczas dodawania przycisków, sprawdzają istniejący odcień. Ale to tylko domysły. Rozwiązanie działa w każdym razie ..

Nadzieja to pomaga komuś, i że nie narusza żadnych zasad święte SO ...

Cheers!

10

Cóż, wygląda bardziej na błąd systemu operacyjnego niż na funkcję, ponieważ paski nawigacyjne zmieniają kolor elementu po ustawieniu koloru tintColor.

Stwierdziliśmy, że jeśli zmienisz styl elementu, odświeży on swój kolor jako efekt uboczny. Następujące czynności działały w naszym przypadku. Oryginalne przyciski są obramowane, więc zmieniamy je na gładkie i ustawia je ponownie. Możesz wykonać bardziej skomplikowany i ogólny kod, który zapisuje bieżący styl, ustawia inny, a następnie przełącza z powrotem. Jestem po prostu leniwy, aby to zrobić. : D W każdym razie, wpadłeś na pomysł.

toolbar.tintColor = //<some dynamically obtained UIColor> 

// Workaround to properly set the UIBarButtonItem's tint color in iOS 4 
for (UIBarButtonItem * item in toolbar.items) 
{ 
    item.style = UIBarButtonItemStylePlain; 
    item.style = UIBarButtonItemStyleBordered; 
} 

Pozdrawiam, Rula.

+0

Przepraszamy, nie działa dla mnie –