2011-07-07 11 views
5

To co usiłuję osiągnąć:chcę UITextField, który jest w UITableViewCell aby zostać pierwszym responder tylko wtedy, gdy komórka dotknął

chcę UITextField który jest w UITableViewCell aby zostać pierwszym responder tylko wtedy, gdy komórka wzruszony. Chciałbym pole tekstowe, aby stać się tylko pierwszy responder kiedy ustawić go do pierwszego odpowiadającego w metodzie:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` 

Każdy pomysł w jaki sposób można to osiągnąć? Gdy pole tekstowe zostanie bezpośrednio dotknięte, tableView:didSelectRowAtIndexPath: nigdy nie jest wywoływane.

Z góry dziękuję.

Odpowiedz

2

Zgaduję, masz niestandardowy UITableViewCell. W tym może mieć członka UITextField. Dobrze?

W klasie komórek niestandardowego zastąpić metodę

- (void)setSelected:(BOOL)selected animated:(BOOL)animated:

to, że, po wybraniu == TAK, to wykonania pola tekstowe jak pierwszy odpowiedź. Inaczej, zrezygnuj z pierwszej odpowiedzi.

1

Niech obiekt będzie delegatem UITextField i implementuj textFieldShouldBeginEditing:; return NO, jeśli komórka nie została wybrana. (Może być w stanie zawsze powrócić NO z tej metody, jeśli wywołanie becomeFirstResponder bezpośrednio omija czek.)

1

za to, że textField stać first responder kiedy wybrany jest uitableviewcell, użyj textField jako swojej property, i nazywają [self.textField1 becomeFirstResponder];

Uwaga: Będziesz potrzebował tyle właściwości, ile twoich komórek UITableView, ponieważ każda komórka ma pole tekstowe.

Po dotknięciu pola tekstowego, kompilator nie będzie znał wybranego wiersza. W tym celu należy użyć tags, na przykład textField.tag == 0 dla pierwszego textField, textField.tag ==1 dla drugiego TextField i tak dalej. A w textFieldDidBeginEditing należy sprawdzić znacznik, a następnie powiązać tę wartość z wybranym wybranym wierszem.

Czy któryś z nich miał sens? :)

1

Po pierwsze potrzebujesz niestandardowej komórki tabeli, własnej podklasy UITableViewCell. W tej implementacji musisz wdrożyć hitTest:, aby określić miejsce, w którym nastąpiło dotknięcie. W tej metodzie możesz określić, czy dotknięcie było rzeczywiście wewnątrz prostokąta twojego UITextField, a jeśli tak było, uczyń go pierwszym reagującym. Oto przykład z jakiegoś kodu pisałem o projekcie:

 
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if (self.editing) { 
     if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil]) 
      return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event]; 

     return [super hitTest:point withEvent:event]; 
    } 

    return [self contentView]; 
} 

Atrybut nickname, w tym przypadku był UITextField wewnątrz niestandardowych UITableViewCell.

Warunek związany z self.editing może, ale nie musi być związany z aplikacją. Pomysł tutaj pokazuje, w jaki sposób hitTest: ogólnie może być użyty.

Powiązane problemy