2012-02-07 22 views
7

Dodałem UIToolBar z UIBarButtonItem jako inputAccessoryView dla UITextView. Działa dobrze, ale UIBarButtonItem jest dotykalny poza jego ramką, być może 50 pikseli na zewnątrz po prawej. To nic wielkiego, ale mnie to denerwuje. Ktoś wie dlaczego?iOS - UIToolBar jako inputAccessoryView dla UITextView

To jest mój kod (ARC):

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)]; 
toolBar.barStyle = UIBarStyleBlack; 
toolBar.translucent = YES; 

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneWriting:)]; 
[toolBar setItems:[NSArray arrayWithObjects:doneButton, nil]]; 

self.messageTextView.inputAccessoryView = toolBar; 

Odpowiedz

2

Pasek wydaje się rozszerzać obszar aktywny z przycisków poza ich granice, jeśli nie ma w pobliżu innych przycisków w pasku narzędzi. Inżynierowie Apple muszą myśleć, że lepiej jest zgadnąć, gdzie użytkownik chciał nacisnąć, a nie reagować w ogóle.

+0

Jeśli tak jest, dla mnie bardziej przypomina to "niechlujne" programowanie, w którym przycisk reaguje poza granicami, no cóż. –

7

W iOS 6 zachowuje się zgodnie z oczekiwaniami. Nicea rada: Jeśli chcesz, aby pojawić się na prawo zamiast w lewo, użyj jednego z nich:

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 

Następnie zainicjowania pasek z:

[toolBar setItems:[NSArray arrayWithObjects:flexibleSpace, doneButton, nil]]; 
2

Mam nadzieję, że to pomaga. ..

UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; 
[keyboardDoneButtonView sizeToFit]; 

UIBarButtonItem* PrevButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:105 target:nil action:nil]; //< 
UIBarButtonItem* NextButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:106 target:nil action:nil]; //> 
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)]; 

UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
UIBarButtonItem *fake = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil] ; 

[keyboardDoneButtonView setItems:[NSArray arrayWithObjects: PrevButton,fake, NextButton,fake,flexSpace,fake,doneButton,nil] animated:YES]; 

Zastosowanie Fałszywy Item, aby uzyskać dokładną lokalizację zaciskową na Buttona ...

+0

bardzo interesujące rozwiązanie, ten pracował dla mnie, dzięki. – carlos16196

Powiązane problemy