Programowo wyrównuj pasek narzędzi na klawiaturze iPhone ' a
W kilku przypadkach chcę dodać pasek narzędzi na górze klawiatury iPhone ' a(jak w iPhone Safari, gdy poruszasz się po elementach formularza, na przykład).
Obecnie określam prostokąt paska narzędzi stałymi, ale ponieważ inne elementy interfejsu są w strumieniu-paski narzędzi i paski nav u góry ekranu - za każdym razem, gdy dokonujemy drobnej zmiany interfejsu, pasek narzędzi nie jest wyrównany.
Czy jest sposób na programowe określenie pozycji klawiatura w stosunku do bieżącego widoku?
8 answers
[[3]} od wersji iOS 3.2 istnieje nowy sposób na osiągnięcie tego efektu:
UITextFields
i UITextViews
mają właściwość inputAccessoryView
, którą można ustawić na dowolny widok, który jest automatycznie wyświetlany powyżej i animowany za pomocą klawiatury.
Zauważ, że widok, którego używasz, nie powinien znajdować się w hierarchii widoków gdzie indziej, ani nie powinien być dodawany do jakiegoś superview, jest to zrobione za Ciebie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-17 21:16:29
Więc zasadniczo:
W metodzie init:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil];
A następnie mają metody, o których mowa powyżej, aby dostosować położenie paska:
-(void) keyboardWillShow:(NSNotification *) note
{
CGRect r = bar.frame, t;
[[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t];
r.origin.y -= t.size.height;
bar.frame = r;
}
Może sprawić, że będzie ładny, animując zmianę pozycji, owijając ją w
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
//...
[UIView commitAnimations];
Jest to oparte na istniejącej odpowiedzi z tonklon - dodaję tylko fragment kodu, który pokazuje półprzezroczysty czarny pasek narzędzi na górze klawiatury, wraz z przyciskiem "Gotowe" po prawej stronie:
UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar sizeToFit];
UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];
NSArray *itemsArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];
[flexButton release];
[doneButton release];
[toolbar setItems:itemsArray];
[aTextField setInputAccessoryView:toolbar];
A -resignKeyboard
wygląda tak:
-(void)resignKeyboard {
[aTextField resignFirstResponder];
}
Mam nadzieję, że to komuś pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:33:47
Jeśli rejestrujesz się na powiadomienia z klawiatury, ie UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
, itd., powiadomienie, które otrzymasz, będzie zawierało granice klawiatury w userInfo
dict (UIKeyboardBoundsUserInfoKey
).
Zobacz numer Klasy UIWindow
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 19:31:36
W wersji 3.0 i nowszej można uzyskać czas trwania animacji i krzywą ze słownika userInfo
powiadomień.
Na przykład, aby animować rozmiar widoku, aby zrobić miejsce dla Klawiatury, Zarejestruj się dla UIKeyboardWillShowNotification
i zrób coś takiego:
- (void)keyboardWillShow:(NSNotification *)notification
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
[UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
CGRect frame = self.view.frame;
frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height;
self.view.frame = frame;
[UIView commitAnimations];
}
Wykonaj podobną animację dla UIKeyboardWillHideNotification
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-17 21:17:19
Znalazłem ten link bardzo przydatny do zrozumienia inputaccesoryview krok po kroku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 13:19:36
Utwórz tę metodę i wywołaj ją przy ViewWillLoad:
- (void) keyboardToolbarSetup
{
if(self.keyboardToolbar==nil)
{
self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(anyAction)];
UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(anyOtherAction)];
NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:cancelButton,extraSpace,doneButton, nil];
[self.keyboardToolbar setItems:toolbarButtons];
self.myTextView.inputAccessoryView=self.keyboardToolbar;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 16:33:47
Nie ma możliwości (AFAIK), aby uzyskać wymiary widoku klawiatury. Jest to jednak stałe, przynajmniej w każdej wersji iPhone do tej pory.
Jeśli obliczysz pozycję paska narzędzi jako przesunięcie od dołu widoku i weźmiesz pod uwagę rozmiar widoku, nie musisz się martwić, czy pasek nawigacyjny jest obecny, czy nie.
Np.
#define KEYBOARD_HEIGHT 240 // example - can't remember the exact size
#define TOOLBAR_HEIGHT 30
toolBarRect.origin.y = viewRect.size.height - KEYBOARD_HEIGHT - TOOLBAR_HEIGHT;
// move toolbar either directly or with an animation
Zamiast define, możesz łatwo utworzyć keyboardHeight
funkcję, która zwraca rozmiar w zależności od tego, czy klawiatura jest wyświetlanie, i przenieść to pozycjonowanie paska narzędzi do osobnej funkcji, która reorganizuje układ.
Może również zależeć od tego, gdzie robisz to pozycjonowanie, ponieważ jest możliwe, że rozmiar widoku może się zmieniać między załadowaniem a wyświetlaniem na podstawie konfiguracji paska nawigacyjnego. Uważam, że najlepszym miejscem do zrobienia tego będzie viewWillAppear.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-20 12:25:51