ПОМОГИТЕ!uitableviewcell кнопка нажата обновить текстовое поле - PullRequest
2 голосов
/ 16 марта 2011

Я хочу нажать кнопку QTY (красный текст) и скопировать текст (т.е. 13) в текстовое поле в той же строке.

here is my sample uitableviewcell

-(IBAction)qtyButtonPressed:(id)sender {

UITextField *textField = (UITextField *)[self.view viewWithTag:3];

textField.text = @"13";

это то, что у меня есть.

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Если в каждой ячейке есть кнопка, сначала нужно определить, какая кнопка из какой строки была нажата.Обычно, если это таблица с 1 секцией, вы можете просто установить номер строки в качестве значения тега кнопки внутри cellForRowAtIndexPath: ... установить, когда ячейка видима

[button setTag:indexPath.row];

Затем в селекторе, вызываемом, когданажата кнопка, получите значение тега для определения номера строки и установите текст для текстового поля в этой строке

  int row = [sender tag];
  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row section:0];
  id cell = [tableView cellForRowAtIndexPath:indexPath];
  [cell.textField setText:....];

Чтобы это работало, вам нужно создать подкласс UITableViewCell и сделать доступным кнопку и textField со свойством/synthesize.

1 голос
/ 26 февраля 2012

Я знаю, что на это ответили, но у меня была похожая проблема, и, к сожалению, я использовал теги, чтобы найти поля в ячейке табличного представления, чтобы позволить мне выложить его в InterfaceBuilder / Xcode и при этом избежать подклассов, как это1001 *

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
    static NSString *AttributeCellIdentifier = @"AttributeCell";
    UITableViewCell *cell;
    UILabel *label;
    UITextField *value;
    MyAttribute *a;

    switch( indexPath.section ) {
        case ATTRIBUTES_SECTION:
            cell = [tableView dequeueReusableCellWithIdentifier: AttributeCellIdentifier];
            label = (UILabel *) [cell viewWithTag: 1];
            value = (UITextField *) [cell viewWithTag: 2];
            a = [attributeList objectAtIndex: indexPath.row];
            label.text = a.label;
            value.text = a.value;
            break;
        // Other sections...
    }
    return cell;
}

, но это означает, что я не могу использовать теги для строки, в которой находится текстовое поле. Поэтому в качестве альтернативы использованию тегов я использовал координату из текстового поля, чтобы увидеть, в какой строке он находится следующим образом:

- (void) textFieldDidEndEditing: (UITextField *) textField {
    NSLog( @"Entering %s with %@", __func__, textField );
    NSIndexPath *textFieldLocation = [self.tableView indexPathForRowAtPoint: [textField convertPoint:textField.bounds.origin toView: self.tableView]];
    NSLog( @"- The textfield is in the cell at: %@", textFieldLocation );

    if( textFieldLocation.section == ATTRIBUTES_SECTION ) {
        MyAttribute *a = [attributeList objectAtIndex: textFieldLocation.row];
        a.value = textField.text;
    }
}

Если у меня в ячейке более одного текстового поля, я все равно могу использовать значение тега, чтобы узнать, какое из них заканчивает редактирование.

Возможно, даже разумносоздайте небольшой вспомогательный метод, который возвращает индекс табличного представления для любого представления:

- (NSIndexPath *) indexPathForView: (UIView *) view {
    NSIndexPath *loc = [self.tableView indexPathForRowAtPoint: [view convertPoint: view.bounds.origin toView: self.tableView]];
    return loc;
}

Это можно поместить в категорию и быть легко доступным для любого табличного представления без необходимости какого-либо кодирования.

0 голосов
/ 16 марта 2011

Вы бы использовали addTarget:action:forControlEvents: на кнопке с UIControlEventTouchUpInside, чтобы зарегистрировать селектор, который будет вызываться при касании кнопки.Затем в этом методе найдите соответствующее текстовое поле и присвойте ему свойство text.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...