2012-02-01 7 views
5

mam UITextField (umieszczony wewnątrz UITableViewCell), który ma UIButton jako zwyczaj rightView:Szerokość problem w UITextField z niestandardowym rightView

UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(10.0, 1.0, cell.bounds.size.width - 20.0, 31.0)] autorelease]; 
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.bounds = CGRectMake(0.0, 0.0, 27.0, 31.0); // Probably not needed, doesn't change anything 
    button.frame = CGRectMake(0.0, 0.0, 27.0, 31.0); 
    [button setImage:[UIImage imageNamed:@"27x31.png"] forState:UIControlStateNormal]; 
    textField.rightView = button;         
    textField.rightViewMode = UITextFieldViewModeUnlessEditing; 

Gdy pole tekstowe jest widoczna, dotyka nie są obsługiwane zgodnie z oczekiwaniami :

  • Po dotknięciu przycisku zostanie on uruchomiony.
  • Po dotknięciu obszaru znajdującego się w pobliżu lewej krawędzi przycisku (ale poza jego granicami) przycisk jest nadal wyzwalany.
  • Jeśli chcę edytować tekst w polu tekstowym, zamiast uruchamiać przycisk, muszę dotknąć przycisku dalej w lewo.

Sytuacja się pogarsza, gdy obrócę urządzenie do trybu poziomego. W takim przypadku obszar po lewej stronie przycisku, który nadal wyzwala przycisk, jest szerszy, a po lewej stronie jest odstęp, który nic nie robi - przycisk nie jest wyzwalany, a tekst nie jest edytowany. Muszę przesunąć znaczną część w lewo, aby edytować tekst w tej sytuacji.

Dzieje się tak tylko wtedy, gdy bieżący tekst w polu jest krótki. Jeśli tekst wypełnia pole tekstowe, dotknięcia są obsługiwane zgodnie z oczekiwaniami (dotyka dowolnego miejsca po lewej stronie przycisku, edytuj tekst zarówno w pionie, jak iw poziomie).

Próbowałem zastąpić textRectForBounds, editingRectForBounds i rightViewRectForBounds. Zweryfikowałem, że są one wywoływane i zwracają poprawne wartości, ale one niczego nie zmieniają (o ile wartości zwracane są poprawne).

Wszelkie pomysły?

+0

Czy kiedykolwiek rozwiązałeś ten problem? Obecnie mam ten sam problem. – AnthonyM

Odpowiedz

0

Czy ustawiłeś właściwości autoreize w TableViewCell? Spróbuj dodać:

[cell setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 

i pola tekstowego i przycisk ustaw opcję takiego UIViewAutoresizingFlexibleTopMargin:

[textField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 

[button setAutoresizingMask: UIViewAutoresizingFlexibleTopMargin]; 
+2

Ustawienie maski autoResizing dla UITableViewCell nie jest konieczne, dziedziczy z UITableView (i spróbowałem, bez zmian). UITextField ma już maskę autouzupełniania (zobacz kod), a przycisku nie należy zmieniać, ponieważ jest to przycisk oparty na obrazie. –

5

Miałem podobny problem z rightView który wydawał się zapobiec część tekstowym przyjmowania wejście. Mój rightView nie był przyciskiem, więc ustawiłam userInteractionEnabled na NO, a pole tekstowe ponownie otrzymywało dotknięcia na całym obszarze.

Ponieważ masz przycisk jako prawy widok, może to niewiele pomóc. Ale innym podobieństwem między naszymi przykładami było to, że oba rightView miały niewielką szerokość. Być może prawyView nie lubi mieć szerokości < x.

+1

Bingo! Tak było. Spędziłem na zawsze próbując dowiedzieć się, co robię, aby zablokować dane wejściowe (korzystałem z trybu LeftView i leftViewMode). Ustawienie UserInteractionEnabled w moim widoku dopełnienia wydaje się naprawić. Dzięki! – Gujamin

Powiązane problemy