2015-09-15 3 views
0

У меня есть табличка для ввода ингредиентов рецепта в приложении для рецептов. Я хочу, чтобы иметь возможность вводить ингредиенты в ячейке tableview, а затем сохранять его для отображения в другом контроллере представления - UILabel (динамически созданный).Редактируемый вид стола

Я нашел код для редактирования таблицы, где данные могут быть вставлены и удалены, но код не может быть введен в ячейку tableview.

Есть ли способ ввода ячейки таблицы? Каков наилучший способ сделать это?

Кроме того, все введенные данные должны храниться в базе данных с использованием основных данных.

Вот скриншот моего раскадровки:

enter image description here

TableView в AddRecipeViewController, где я хочу, чтобы ввести данные. Когда я нажимаю save, данные должны отображаться в RecipeDetailViewController Ingredients UIView.

Update:

Я создал IngrdientsTableViewCell класс для пользовательских ячейки с UITextField для ввода текста. Но когда я компилирую, tableview не отображает текстовое поле для ввода. Я понятия не имею, что я делаю неправильно. Пожалуйста помоги!

Обновленный код:

IngrdientsTableViewCell.h

@interface IngredientsTableViewCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet UITextField *ingredientTextField; 

@end 

IngrdientsTableViewCell.m

- (void)awakeFromNib 
{ 
    // Initialization code 
    self.ingredientTextField = [[UITextField alloc]initWithFrame:CGRectMake(5, 5, 320, 39)]; 
    self.ingredientTextField.autoresizingMask=UIViewAutoresizingFlexibleHeight; 
    self.ingredientTextField.autoresizesSubviews=YES; 
    self.ingredientTextField.layer.cornerRadius=10.0; 
    [self.ingredientTextField setBorderStyle:UITextBorderStyleRoundedRect]; 
    [self.ingredientTextField setPlaceholder:@"Type Data Here"]; 
} 

AddRecipeViewController.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.ingredientItems.count; 
} 

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"Ingredient Cell"; 
    IngredientsTableViewCell *ingredientCell = [self.ingredientsTableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    // NSManagedObjectContext *managedObject = [self.ingredientItems objectAtIndex:indexPath.row]; 
    if (ingredientCell == nil) 
    { 
     ingredientCell = [[IngredientsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     ingredientCell.accessoryType = UITableViewCellAccessoryNone; 
    } 
    [ingredientCell addSubview:ingredientCell.ingredientTextField]; 

    return ingredientCell; 
} 

Спасибо за любой Помогите.

+0

Просто добавьте UITextView в прототип вашей ячейки. При редактировании останавливается обновление модели данных. Если все ваши контроллеры используют datamodel, все будет автоматически обновляться. –

+0

Я попытался добавить UITextField, а также UITextView в ячейку прототипа в раскадровке. Он дает следующую ошибку: Неверная конфигурация: соединение «componentsTextView» не может содержать объект-прототип в качестве адресата. –

+0

Создали ли вы классы для своих прототипов. Если не создать класс для каждого типа ячейки и установить класс в xcode в инспекторе класса. Затем вы должны иметь возможность CTRL перетащить ваш UITextField в заголовок для класса ячейки для создания IBOutlets. Что вы делаете, чтобы получить ошибку подключения? –

ответ

0

У вас должен быть пользовательский UITableViewCell с UITextView в нем.

0

Вы можете добавить textField/View в tableViewCell и просто обрабатывать текстовые события, как обычно. Я делаю что-то подобное с TextFields.

UITextField *textField; 
cell.textLabel.text = NSLocalizedString(@"Name", @"Name"); 
textField = self.name = [self makeTextField:self.selectedUser.name]; 
textField.delegate = self; 
self.name.autocapitalizationType = UITextAutocapitalizationTypeWords; 
self.name.keyboardType = UIKeyboardTypeDefault; 
self.name.returnKeyType = UIReturnKeyNext; 
self.name.tag = indexPath.row; 
[cell addSubview:self.name]; 

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

+0

Можете ли вы подробнее рассказать о вышеуказанном коде? Я не понял, что делает makeTextField, selectedUser и имя здесь. –