2010-12-15 16 views
24

Użyłem arkusza akcji w moim projekcie i gdy pojawi się on, pokazuje wszystkie przyciski, ale ostatni (czwarty) przycisk nie odpowiada na moje kliknięcie (tylko połowa odpowiada)ostatni Przycisk arkusza działań nie zostanie kliknięty

Wiem, dlaczego tak jest, ponieważ użyłem TabBarController i obecna klasa jest wewnątrz tego kontrolera tabbar .... tylko ta część arkusza odpowiada, która jest nad zakładkami .... i mój ostatni przycisk jest połowa powyżej, a połowa jest na szczycie im zakładkami

pomóż

+0

Proszę wysłać jakiś kod, a następnie łatwo możemy pomóc go rozwiązać. – jfalexvijay

+0

Po prostu nie możesz użyć żadnej z metod showFromTabBar, jeśli używasz niestandardowych tabel tabli. stackr powiedzieć bets odpowiedź! –

+0

@ WinDMak3r - Tak, wiem i dlatego dostał 32 zapisy w górę :) – Saawan

Odpowiedz

83

Proponuję przy użyciu to:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow]; 

miałem ten sam problem, który masz i za pomocą tej metody, aby pokazać, że pracował dla mnie. TabBar chce pozostać kluczem Window, co sprawia, że ​​dolny przycisk pojawia się powyżej, ale w rzeczywistości jest pod kartą.

Nadzieja to załatwia sprawę dla ciebie ..

Edit

Jeśli używasz trybu krajobrazu i powyżej metody nie działają. Można użyć następujący dylemat:

@Vinh Tran: [arkusz showFromTabBar: self.parentViewController.tabBarController.tabBar]

+0

+1 - To działało dzięki ... – Saawan

+0

Pracowałem świetnie! Thanx – Ladislav

+0

Działa wspaniale dzięki – pa12

3

Jakie metody używacie, aby pokazać swoją ACTi onsheet. Spróbuj showFromTabBar: metoda

+0

Używam -------- \t UIActionSheet * actionsheet = [[przydział UIActionSheet] initWithTitle: @ "Wybierz typ pliku" delegat: self cancelButtonTitle: nil destructiveButtonTitle: nil otherButtonTitles: @ "first", @ "2nd", @ "3rd", @ "4th", nil]; \t [actionsheet showInView: self.view]; \t [releaseheet release]; – Saawan

+0

spróbuj użyć metody, którą zasugerowałem zamiast showInView :. jak rozumiem jest zaprojektowany do obsługi dokładnie twojej sprawy (nie użyłem go samemu ...) – Vladimir

+0

zgodnie z twoją sugestią użyłem następującej metody ...... [actionsheet showFromTabBar: delegate.tabC.tabBar]; ... gdzie delegat jest obiektem mojej klasy delegatów, gdzie jest tabbarController tabC ............... Ale mój program CRASHED ... – Saawan

0

Prawdziwym problemem przychodzi, gdy interfejs jest obracany do góry, a kontroler widok rodzic ma transformacja na tym. Uwierz mi, to realistyczny scenariusz, doh. Następnie arkusz akcji jest przycinany i nie można używać parentViewController, ponieważ jest on przekształcany. Rozwiązaniem, które pozwoli uniknąć tych wszystkich problemów, jest utworzenie nowego okna, dodanie kontrolera widoku obrotowego jako rootViewController i użycie jego widoku do wyświetlenia arkusza.

CGRect applicationRect = [[UIScreen mainScreen] bounds]; 
UIWindow* actionSheetWindow = [[UIWindow alloc] initWithFrame:applicationRect]; 
RotationViewController* rootViewController = [[RotationViewController alloc] initWithNibName:nil bundle:nil]; 
actionSheetWindow.rootViewController = rootViewController; 
[rootViewController release]; 
actionSheetWindow.hidden = NO; 

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil]; 
[actionSheet setCancelButtonWithTitle:@"Cancel" handler:^{ 
    actionSheetWindow.hidden = YES; 
    [actionSheetWindow release]; 
}]; 

[actionSheet showInView:rootViewController.view]; 

Powyższy kod używa BlocksKit, ale można to zrobić również za pomocą właściwości delegata akcji i instancji.

RotationViewController tylko podklasą UIViewController, który implementuje

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor clearColor]; 
    self.view.opaque = NO; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 
Powiązane problemy