2015-07-25 4 views
0

У меня есть пользовательский Tableview ячейку с текстовым полем и две меткиредактируемые TextField в ячейке таблицы просмотра пользовательских

TableViewCell:

@interface CartTableViewCell : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *proCost; 
@property (weak, nonatomic) IBOutlet UITextField *txtQtyCount; 
@property (weak, nonatomic) IBOutlet UILabel *lblTotalCost; 

@end 

ViewController.h

@interface CartViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate,UITabBarControllerDelegate> 
@property (weak, nonatomic) IBOutlet UITableView *tblView; 
@end 

ViewController.m

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
CGPoint origin = textField.frame.origin; 
    CGPoint point = [textField.superview convertPoint:origin toView:self.tblView]; 

    NSIndexPath * indexPath = [self.tblView indexPathForRowAtPoint:point]; 
    NSLog(@"%ld",(long)cartCell.txtQtyCount.tag); 
    [self.tblView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 

    qty = cartCell.txtQtyCount.text; 
    quanty = [qty doubleValue]; 
    double qua = price * quanty; 
    qtotal =[[NSString alloc] initWithFormat:@"%.2f",qua]; 
    [dictionary setObject:qtotal forKey:@"qtotal"]; 
    [dictionary setObject:qty forKey:@"qty"]; 

    [self.tblView beginUpdates]; 
    NSArray *indexPaths = [[NSArray alloc] initWithObjects:indexPath, nil]; 
    [self.tblView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; 
    [self.tblView endUpdates]; 
    [cartCell.txtQtyCount resignFirstResponder]; 

    return YES; 
} 

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


    cartCell =[self.tblView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    NSDictionary *tmpDict = [myObject objectAtIndex:indexPath.row]; 
    NSMutableString *name; 
    name = [NSMutableString stringWithFormat:@"%@ ", 
       [tmpDict objectForKey:@"name"]]; 


    qty = [NSMutableString stringWithFormat:@"%@ ", 
      [tmpDict objectForKey:@"qty"]]; 

    NSString *qtot = [NSString stringWithFormat:@"%@",[tmpDict objectForKey:@"qtotal"]]; 


    NSMutableString *qcost; 
    qcost = [NSMutableString stringWithFormat:@"%@ ", 
       [tmpDict objectForKey:@"total"]]; 

    cartCell.txtQtyCount.tag = indexPath.row; 
    cartCell.proCost.text = qcost; 
    cartCell.txtQtyCount.text = qty; 
    cartCell.lblTotalCost.text = qtot; 
} 

Фактически у меня есть proCost с одним двойным значением и txtQtyCount, где я могу обновить количество, чтобы умножить цену с количеством и хочу сохранить умноженное значение в lblTotalCost. Я не понимаю, как получить значение (индексный путь) отредактированной строки.

+0

Не могли бы вы разместить cellForRowAtIndexPath: метод? – ZeMoon

+0

Вы не возвращаете ячейку в этом методе, или вы удалили часть? – ZeMoon

+0

Да, я удалил строку, к сожалению, но я вернул ячейку в своем коде –

ответ

0

Вы можете получить все необходимое, просто просмотрев обновленный массив данных (myObject).

Очевидно, что вам необходимо обновить его, поэтому, когда пользователь вводит новое количество, убедитесь, что вы обновили tmpDict «qty» с тем же индексом, что и ваш тег текстового поля.

+0

как обновить «qty» в том же индексе? –

+0

[((NSMutableDictionary *) [myObject objectAtIndex: textfield.tag]) setObject: (значение пользователя, введенное в текстовое поле) forKey: @ "qty"]; – luca

0

Были проблемы с этим. Я понял, что мне действительно нужно было indexPath этой точки зрения в правильной ячейке

Так .. Я сделал UITakeViewcategory и имел метод, как это:

-(NSIndexPath *)indexPathForCellContaininView:(UIView *)view 
    { 
     while (view != nil){ 

      if ([view isKindOfClass:[UITableViewCell class]]){ 

        return [self indexPathForCell:(UITableViewCell *)view]; 
      }else { 
         view = [view superview]; 
      } 
     } 

     return nil; 
    } 

Тогда вы могли бы использовать его в UITextFields делегатов, иметь смысл для вашего случая использования - включить:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSIndexPath *indexPath = [self.tableView indexPathForCellContaininView:textField]; 

/// do something with the index path - you have the exact cell/uitextfield being edited // 

return YES; 
} 
Смежные вопросы