2012-03-22 3 views
0

Хорошо, я знаю, что этот вопрос задан раньше, но у меня другая проблема, чем у других.Сохраните UITextField внутри UITableViewCell до NSMutableArray

У меня есть текстовое поле внутри пользовательской ячейки таблицы, которую мне нужно сохранить в массиве после отклонения номерной подушки. Поскольку на цифровой клавиатуре нет кнопки, мне пришлось реализовать сенсорное событие, чтобы отклонить цифровую панель. Это означает, что мой -textFieldDidEndEditing не срабатывает. Вот соответствующий код:

в моей viewController.h

itemData *tempItem; //A custom object  
UITableView *itemsListTable; 
NSMutableArray *listData; 

в моей viewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

     static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 


     UITableViewCell *cell = [itemsListTable 
           dequeueReusableCellWithIdentifier:SimpleTableIdentifier]; 

     if (cell == nil) { 
      cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:SimpleTableIdentifier]; 


     NSInteger row = indexPath.row; 
     tempItem = [listData objectAtIndex:row]; 
     cell.textLabel.text = [tempItem getItemName]; 


     UITextField *quantityTextField = [[UITextField alloc] initWithFrame:CGRectMake(275, 8, 35, 27)]; 
     quantityTextField.keyboardType = UIKeyboardTypeNumberPad; 
     quantityTextField.borderStyle = UITextBorderStyleRoundedRect; 
     quantityTextField.returnKeyType = UIReturnKeyDone; 
     quantityTextField.text = [NSString stringWithFormat:@"%d", tempItem.getItemQuantity]; 
     quantityTextField.textAlignment = UITextAlignmentCenter; 


     [cell addSubview:quantityTextField]; 
     } 


     return cell; 

    } 

-(void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event { 
[[self itemsListTable] endEditing:YES]; 
    } 
- (void)textFieldDidEndEditing:(UITextField *)textField { 

    UITableViewCell *cell = (UITableViewCell*)textField.superview; 

    NSIndexPath *indexPath = [self.itemsListTable indexPathForCell:cell]; 

    tempItem = [listData objectAtIndex:indexPath.row]; 

    NSLog(@"Did End Editing"); 
    [tempItem setItemQuantity:[textField.text intValue]]; //save textfield to object as intValue 

    [listData replaceObjectAtIndex:indexPath.row withObject:tempItem]; //save object to array 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [listData removeObjectAtIndex:indexPath.row]; 
     [itemsListTable reloadData]; 
    }  
} 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section 
{ 
    numberOfItems.text = [NSString stringWithFormat:@"%d",listData.count]; 

    return [self.listData count]; 
} 
+0

В дополнение, для хорошего соглашения об именах, все имена классов должны начинаться с заглавной буквы, например. 'ItemData' вместо' itemData'. – Raptor

+0

@ShivanRaptor Я только написал код, относящийся к UITableView или UITextField – Boos1993

ответ

2

Когда ваше прикосновение событие увольняет клавиатуры, также называют [само textFieldDidEndEditing:], или если вам нужно знать, какое текстовое поле было сосредоточено в прошлом, сохраните ссылку, указав объект UITextField, который вы установили в текущее текстовое поле, которое имеет первый ответчик в функции делегата textFieldDidBeginEditing. Пример:

//In .h 
UITextField * txtReference; 

//In .m 
- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    txtReference = textField; 
} 

//In the function that dismisses the keyboard put: 
[self textFieldDidEndEditing:txtReference]; 
+0

Спасибо! Это работает идеально для того, что я спросил! к сожалению, я понял, что мне нужен другой подход, потому что у меня есть текстовое поле в каждой ячейке;) – Boos1993

+0

У меня также есть текстовое поле в каждой из моих ячеек. У меня нет проблем. –

+0

Если у вас есть UITextfield в каждой ячейке, вы думали о создании пользовательских ячеек, если их еще нет. – Popeye

Смежные вопросы