Używam ABPeoplePickerNavigationController, podklasy UINavigationController, aw kontekście, w którym używam go domyślny przycisk paska nawigacji po prawej stronie, "Anuluj", nie ma sensu. Nie mogę znaleźć sposobu na jego wyłączenie lub ukrycie, a jakakolwiek zastosowana metoda musi być publiczna i możliwa do zaakceptowania w sklepie. Pozbycie się paska nawigacji w całości (picker.navigationBarHidden = YES;) może być opcją, z tym wyjątkiem, że po powrocie do listy kontaktów pasek nawigacji pojawi się ponownie. Podklasy ABPeoplePickerNavigationController i przechwytywanie viewWillAppear, aby spróbować i zerować przycisk anulowania nie działa. [zestaw do pobieraniaAllowsAnuluj: NIE]; DZIAŁA, ale jest nieudokumentowany, więc oczekuję, że nigdy nie przejdzie zatwierdzenia.ABPeoplePickerNavigationController - usuń przycisk "Anuluj" bez korzystania z prywatnych metod/właściwości?
Odpowiedz
Brak odpowiedzi na to pytanie - napisz nowy wybór osoby, jeśli nie możesz żyć z anulowaniem.
Nie możesz po prostu napisać "wyboru osoby" - musisz poprosić o pozwolenie na książkę adresową, co obniży współczynnik konwersji; domyślny selektor osób firmy Apple nie wymaga uprawnień systemowych. – Zorayr
Możesz uzyskać przeglądanie wyników przez podglądy picker. Po prostu trochę nudne ...
Ustaw delegata na kontroler PeoplePickerController. W klasie delegatów użyj tej metody delegatów.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
UIView *pCustomView = [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
UIBarButtonItem *pBtn = [[UIBarButtonItem alloc] initWithCustomView:pCustomView];
[viewController.navigationItem setRightBarButtonItem:pBtn animated:NO];
[pBtn release];
[pCustomView release];
}
nie próbowałem tego jeszcze, ale myślę Uby mówi do iterację subviews z próbnika, aż znajdziesz taki, który jest isKindOfClass: [UIBarButtonItem klasa], a następnie można zmienić jego tytuł nieruchomość. Może również znajdować się w tablicy "Element" nawigacji.
Pamiętaj, aby ustawić delegata dla selektora obiektów (nie peoplePickerDelegate, tylko delegata) do klasy, które implementują następujące metody:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UIView *custom = [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:custom];
[viewController.navigationItem setRightBarButtonItem:btn animated:NO];
[btn release];
[custom release];
}
to działa dobrze, ale w iOS 4 jest jeszcze jedna rzecz, . Po przełączeniu z powrotem do mojej aplikacji przy użyciu funkcji Fast App Switching ponownie pojawia się przycisk anulowania.
Sposób
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
nie zostanie wywołana. Zrobiłem to:
- (void)applicationDidEnterBackground:(UIApplication *)application {
id topView = pickerControllerDelegate.peoplePicker.topViewController;
topView.navigationItem.rightBarButtonItem = nil;
}
Działa całkiem nieźle.
ten
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
UIView *custom = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f,0.0f,0.0f)];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithCustomView:custom];
//UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction)];
[viewController.navigationItem setRightBarButtonItem:btn animated:NO];
[btn release];
[custom release];
}
działa idealnie!
Przykłady w niniejszym dokumencie za pomocą metody delegacyjnej navigationController: willShowViewController: animated: wykonaj pracę, ale może się zdarzyć, że chcesz dodać własny element nawigacyjny do swoich kontrolerów, a podane opcje usuwają wszystko, co możesz ustawić we własnych kontrolerach. Oto kod, który mam z powodzeniem stosowane, aby uzyskać tę opcję, aby dobrze pracować:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
// Here we want to remove the 'Cancel' button, but only if we're showing
// either of the ABPeoplePickerNavigationController's top two controllers
if ([navigationController.viewControllers indexOfObject:viewController] <= 1) {
viewController.navigationItem.rightBarButtonItem = nil;
}
}
pamiętać, że istnieją dwa kontrolery Zobacz w stos kontrolera nawigacyjnego, jeden dla grup kontaktów i jeden na liście kontaktów. Właśnie dlatego nie możemy po prostu sprawdzić podglądu. Sterownik jest kontrolerem widoku kontrolera nawigacyjnego.
EDYCJA: Patrz uwagi poniżej. To jest teraz ilustracja tego, czego nie robić.
Próbowałem uzyskać pożądane zachowanie za pomocą publicznego interfejsu API, podklasy ABPeoplePickerNavigationController i przechwytywanie wszystkich zdarzeń, które zmieniają bieżący widok kontrolera widoku nawigacyjnego. Następnie można po prostu nawigować po hierarchii widoku i usuwać niechciane przyciski.
Możesz nawigować po hierarchii widoków od delegata, ale nie wiesz o zdarzeniach, które zmieniają stan widoku ... co utrudnia zabicie przycisku Anuluj i sprawienie, by się trzymał.
Ten kod rodzaj pracował dla mnie (uwaga: brute-force zabija wszystkie przyciski po prawej stronie):
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self killCancelButton];
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
[super pushViewController:viewController animated:animated];
[self killCancelButton];
}
- (UIViewController*)popViewControllerAnimated:(BOOL)animated {
UIViewController *result = [super popViewControllerAnimated:animated];
[self killCancelButton];
return result;
}
- (void)killCancelButton {
for (NSUInteger itemIdx = 0; itemIdx < self.navigationBar.items.count; itemIdx++) {
UINavigationItem *item = [self.navigationBar.items objectAtIndex:itemIdx];
item.rightBarButtonItems = [[NSArray alloc] init];
}
}
BTW, masz rację viewWillAppear: (BOOL) nie działa. Musiałem wywołać killCancelButton po tym, jak widok jest już aktywny. Nie wygląda na glitchy na moim iPhone 4, ale może wydawać się zabawny na starszych/wolniejszych urządzeniach, jak przypuszczam. –
Wygląda na urywany, ponieważ gdy ABPeoplePickerNavigationController pojawia się jako modalny, animuje się za pomocą przycisku Anuluj. Dopiero gdy się zatrzyma, przycisk zostanie usunięty. Argh. – n13
Skończyło się na tym, że zbudowałem swój własny widok/kontroler uzyskując dane modelu ze struktury Książki adresowej, ponieważ w końcu okazało się to glitchy, jak wspomniano powyżej. Mam nadzieję, że nikogo nie wprowadziłem w brutalne poczucie bezpieczeństwa. –
według Russel b można po prostu zastąpi viewdidapper
ten pracował dla mnie:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UINavigationItem *item = (UINavigationItem *)[self.navigationBar.items lastObject];
item.rightBarButtonItems = [[NSArray alloc] init];
item.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
}
- 1. Pasek JavaScript Anuluj przycisk?
- 2. UIAlertView bez przycisku Anuluj?
- 3. Anuluj Anuluj przycisk Anuluj Nie pokazano na Androidzie
- 4. Dostosuj przycisk Anuluj struktury Twittera
- 5. ABPeoplePickerNavigationController zmiany z iOS8?
- 6. Dostosowywanie paska nawigacyjnego ABPeoplePickerNavigationController w iOS 8
- 7. Twitter Post iOS6 Przycisk "Anuluj" numer
- 8. Przycisk Anuluj nie jest wyświetlany w UISearchBar
- 9. Przycisk Anuluj miejsce w UIActionSheet na dole
- 10. Obraz na przycisk Anuluj od UISearchbar
- 11. deselectRowAtIndexPath na ABPeoplePickerNavigationController
- 12. Usuń przycisk „OK” z okna słodki ostrzegania
- 13. Dodaj przycisk Usuń w RecyclerView
- 14. Przycisk Anuluj nie robi nic w MFMailComposeViewController - iOS 8
- 15. Chcę wyświetlić przycisk OK i anuluj w oknie dialogowym powiadomienia?
- 16. Przerwij kontra przycisk Anuluj: Kiedy używam Przerwij, kiedy anulujesz?
- 17. Jaki jest Pythonowy sposób korzystania ze zmiennych prywatnych?
- 18. Usuń wszystkie kolumny bez danych z DataTable
- 19. zrzutowisko js połączyć usunąć url przycisk Usuń
- 20. Usuń cały wiersz tabeli przycisk angularjs
- 21. przycisk Usuń usuwać na pierwszy zestaw pól
- 22. JavaScript: Jak domyślnie wybrać "Anuluj" w polu potwierdzenia?
- 23. Usuń elementy onclick (w tym sam przycisk usuwania) z jQuery
- 24. usuń atrybut readonly z wielu pól klikając przycisk w jquery
- 25. JS - Usuń tag bez kasowania zawartości
- 26. Najlepsze praktyki dla prywatnych kluczy prywatnych
- 27. Code Completion dla prywatnych/chronionych zmiennych członkowskich podczas korzystania z magic __get()
- 28. Jak poprawnie używać ABPersonViewController z ABPeoplePickerNavigationController, aby wyświetlić informacje kontaktowe?
- 29. rozciąga klasy z prywatnych konstruktora
- 30. Wyświetl ABPeoplePickerNavigationController przy użyciu serii scencase
spróbować https://gist.github.com/2970980 –
To może pomóc http://www.scott-sherwood.com/ios5-removing-the-cancel-button-on-abpeoplepickernavigationcontroller/ – c0d3Junk13
Utknąłem na tym samym problemie i po prostu chcę powiedzieć, że to absolutne wyśmiewanie się Apple . Tak, Twoja aplikacja zostanie odrzucona, jeśli użyjesz setAllowsCancel lub setAllowsCardEditing. – c0d3Junk13