2010-10-12 15 views
9

Czcionka jest bardzo mała i trudna do odczytania, dlatego chciałbym ją przybliżyć do rozmiaru czcionki używanego na przyciskach pod nią.Czy istnieje sposób na zmianę rozmiaru czcionki tytułu w arkuszu UIActionSheet?

+0

Prawdopodobnie nie ma obsługiwanego sposobu, aby to zrobić. Prawdopodobnie możesz uzyskać odniesienie do widoku arkusza akcji, a następnie przejść przez niego, aby znaleźć tytuł UILabel i edytować ten widok bezpośrednio, ale może to pęknąć w przyszłości, jeśli implementacja systemu operacyjnego zmieni się. – Nimrod

Odpowiedz

2

Nimrod powiedział, że nie można tego zrobić metodą natywną. Możesz sprawdzić subviews UIActionSheet, znaleźć dobry i zmienić jego właściwości.

ALE

  • Ta implementacja może upaść w Futur aktualizacji iOS
  • Apple może odrzucić aplikację
  • UIActionSheet jest rodowitym elementem iPhone GUI a użytkownicy są zaznajomieni z nim

SO

Naprawdę nie powinien zmienić rozmiar czcionki .. Jeśli ten tytuł UIActionSheet jest ważne należy znaleźć inny sposób, aby pokazać go do użytkownika ...

16

można zmienić właściwości czcionki po pokaż metodę (jak showFromBarButtonItem) jak poniżej.

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 
UILabel *newTitle = [[[UILabel alloc] initWithFrame:oldFrame] autorelease]; 
newTitle.font = [UIFont boldSystemFontOfSize:17]; 
newTitle.textAlignment = UITextAlignmentCenter; 
newTitle.backgroundColor = [UIColor clearColor]; 
newTitle.textColor = [UIColor whiteColor]; 
newTitle.text = @"My Title"; 
[sheet addSubview:newTitle]; 

[sheet release]; 
+0

Doskonałe rozwiązanie. A powodem, dla którego wykonujemy tę metodę AFTER 'show' jest to, że nie mamy ramki działania i jej subviews przed' show' – Philip007

+0

Ta metoda nie działa już od iOS 7 – Keab42

+0

Świetna odpowiedź z dokładnym wyjaśnieniem !! – sac

0

Cóż, istnieje sposób, aby to zrobić - Stworzyłem podklasę UIActionSheet na github nazwie LTActionSheet

Jak inni wspomniano, wszystkie rodzaje strasznych rzeczy może się zdarzyć, jeśli używasz go (nie ma w kod wysyłkowy ... jeszcze :-)) Jeśli używasz go w aplikacji, która zostanie zaakceptowana, daj nam znać!

2

@ odpowiedź user651909 męska działa świetnie dla mnie, chociaż tylko dodać jeszcze kilka szczegółów:

musiałem initWithTitle:@" " (uwaga niepusty ciąg) podczas tworzenia UIActionSheet tak, że widok miał trochę miejsca na szczycie dla każdego tekstu na początek. Następnie, po wykonaniu [popupQuery showInView:self.view];, dodałem jego sugestię, aby oldFrame została zainicjowana. Wreszcie, dodałem:

[newTitle sizeToFit]; 
newTitle.frame = CGRectMake(oldFrame.origin.x, 
          oldFrame.origin.y, 
          oldFrame.size.width, 
          newTitle.frame.size.height); 

Było to konieczne, ponieważ WYSOKOŚĆ oldFrame „s była zbyt mała dla mojej większej czcionki (rozmiar 20), powodując kilka liter, aby obcięte na dole. Nawet przy tej korekcie, jeśli tekst jest zbyt duży, powiedz większy niż boldSystemFontOfSize: 26, tekst zostanie wyświetlony zbyt blisko lub w przyciskach poniżej. Zmiana rozmiaru ramki arkusza nie pomaga, ponieważ przyciski wydają się być zakotwiczone do góry.

Przypuszczalnie robi

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 

nie narusza politykę Apple o nie używając żadnego wewnętrznego API, prawda?

0
UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"SpecifySearch" 
       delegate:self 
     cancelButtonTitle:@"Cancel" 
    destructiveButtonTitle:nil 
     otherButtonTitles:@"UncategorizedContacts" , nil]; 

//as.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
[as showFromTabBar:self.tabBarController.tabBar]; 

if(as.subviews.count > 0 
    && [[as.subviews objectAtIndex:0] isKindOfClass:[UILabel class]]){ 
    UILabel* l = (UILabel*) [as.subviews objectAtIndex:0]; 
    [l setFont:[UIFont boldSystemFontOfSize:20]]; 
} 

[as release]; 
0

Tak jak pokazał conecon, można uzyskać wskaźnik i manipulować nim. Jeśli dobrze rozumiem, co próbujesz zrobić, to:

[sheet showInView:[self.view window]]; 
UILabel *title = [[sheet subviews] objectAtIndex:0]; 
title.font = [UIFont boldSystemFontOfSize:20]; 
title.textAlignment = UITextAlignmentCenter; 

Mam nadzieję, że to pomoże!

1
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Share" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Facebook", @"Twitter",nil]; 
[sheet showInView:self.view]; 
if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
    CGRect labelFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 
    [[[sheet subviews] objectAtIndex:0] removeFromSuperview]; 
    UILabel *newTitle = [[UILabel alloc] initWithFrame:labelFrame]; 
    newTitle.font = [UIFont boldSystemFontOfSize:17]; 
    newTitle.textAlignment = UITextAlignmentCenter; 
    newTitle.backgroundColor = [UIColor clearColor]; 
    newTitle.textColor = [UIColor whiteColor]; 
    newTitle.text = @"Share"; 
    [sheet addSubview:newTitle]; 
} 
2

Z UIActionSheet Class Reference:

UIActionSheet nie jest przeznaczony do podklasy, nie należy dodawać widoki do swojej hierarchii. Jeśli chcesz przedstawić arkusz z większą personalizacją niż w interfejsie API interfejsu UIActionSheet, możesz utworzyć własny i zaprezentować go modalnie za pomocą presentViewController:animated:completion:.

Powiązane problemy