сохранить содержимое TextField в пользовательском динамическом табличном представлении - PullRequest
0 голосов
/ 21 марта 2012

У меня есть пользовательский TableViewCell с динамическим контроллером tableview снимок экрана моего приложения

продукты сохранены в CoreData, и я могу их получить (имя, цена и т. Д.), Но яне знаю, как реализовать количество продуктов.это текстовое поле, и я хочу сохранить текстовое поле, когда я нажимаю на кнопку корзины.

вот мой TableViewCell.h:

 #import <UIKit/UIKit.h>

 @interface ProduktTableViewCell : UITableViewCell <UITextFieldDelegate>

 @property (nonatomic, weak) IBOutlet UILabel *produktnameLabel;
 @property (nonatomic, weak) IBOutlet UILabel *preisLabel;
 @property (nonatomic, weak) IBOutlet UILabel *vonDatumLabel;
 @property (nonatomic, weak) IBOutlet UITextField *menge;
 @property (nonatomic, weak) IBOutlet UILabel *bisDatumLabel;
 @property (strong, nonatomic) IBOutlet UIButton *datumButton;
 @property (strong, nonatomic) IBOutlet UIButton *warenkorbButton;
 @end

TableViewCell.m:

 #import "ProduktTableViewCell.h"

 @implementation ProduktTableViewCell
 @synthesize produktnameLabel;
 @synthesize preisLabel;
 @synthesize vonDatumLabel;
 @synthesize bisDatumLabel;
 @synthesize datumButton;
 @synthesize menge;
 @synthesize warenkorbButton;


 @end

my ProductViewController.m:

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

    ProduktTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"produktCell"];

    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.produktnameLabel.text = [managedObject valueForKey:@"produktname"]; 
    cell.vonDatumLabel.text = [managedObject valueForKey:@"vondatum"];
    cell.bisDatumLabel.text = [managedObject valueForKey:@"bisdatum"]; 
    cell.datumButton.tag = indexPath.row;
    cell.warenkorbButton.tag = indexPath.row;
    cell.menge.tag = indexPath.row;


    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    NSLocale *german = [[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
    [formatter setLocale:german];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [formatter setMinimumFractionDigits:2];
    [formatter setMaximumFractionDigits:2];


    NSNumber *firstNumber = [managedObject valueForKey:@"preis"];

    cell.preisLabel.text = [formatter stringFromNumber:firstNumber];



    return cell;
}

кнопка моей корзины:

- (IBAction)warenkorbButton:(id)sender {
    NSManagedObjectContext *context = [app managedObjectContext]; 
    UIButton *button = sender;
    NSInteger rowInIndexPath =button.tag;
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowInIndexPath inSection:0];
    Warenkorb *warenkorb = [NSEntityDescription insertNewObjectForEntityForName:@"Warenkorb" inManagedObjectContext:context];

   Produkt *produkt = [self.fetchedResultsController objectAtIndexPath:indexPath];

    warenkorb.produktname  =produkt.produktname ;
    warenkorb.vondatum = produkt.vondatum;
    warenkorb.bisdatum = produkt.bisdatum;
    warenkorb.preis =produkt.preis;

    NSError *error;
    if (![context save:&error]) 
    {
        NSLog(@"Fehler beim hinzufügen : %@", [error localizedDescription]);
    }
}

1 Ответ

2 голосов
/ 21 марта 2012

Вот что я понял.Вы хотите получить значение, введенное в текстовое поле.(Верно?) В ProduktTableViewCell.h создайте выход для вашего элемента UITableView в xib-файле. Итак, что-то вроде:

@property (retain, nonatomic) IBOutlet UITableView *myTableView;

Пожалуйста, позаботьтесь об атрибутах свойства.Приведенный выше код является лишь примером.Затем в ProduktTableViewCell.m синтезируйте myTableView и объявите глобальную переменную:

static NSIndexPath *myIndexPath;

Далее, на - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath сохраните indexPath:

myIndexPath = indexPath;

Также присвойте уникальное значениеcell.menge.tag:

cell.menge.tag = indexPath.row + 437812;

Теперь в - (IBAction)warenkorbButton:(id)sender извлекаем ячейку, содержащую текстовое поле и, в конечном итоге, получаем текстовое поле:

UITableViewCell *cell = [myTableView cellForRowAtIndexPath:myIndexPath];
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:indexPath.row + 437812];

Наконец, текст находится в textField.text.


Надеюсь, это поможет!

...