我有一个带有- (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];
[ingredientCell.ingredientTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
}
//Populate the textfield in the ingredientCell
ingredientCell.ingredientTextField.text = [self.ingredientItems objectAtIndex:indexPath.row];
return ingredientCell;
}
的tableView单元格来输入文本。
我使用以下代码填充tableView:
@selector(editingChanged:)
以下是永不执行的textField的-(void) editingChanged:(id)sender{
NSLog(@"hi");
// get the text being entered
NSString *ingredientText = ((UITextField *)sender).text;
//get the index of the selected row
NSInteger selectedIndex = [self.ingredientsTableView indexPathForSelectedRow].row;
//save the text to the array
[self.ingredientItems setObject:ingredientText atIndexedSubscript:selectedIndex];
}
方法。我做错了什么?
{{1}}
答案 0 :(得分:0)
所以你想要使用textFieldDelegate(或者如果你喜欢冒险,你可以使用ReactiveCocoa)。
在顶部添加
<UITextFieldDelegate>
这在你的cellForRowAtIndexPath
中ingredientCell.ingredientTextField.delegate = self;
ingredientCell.ingredientTextField.tag = 1;
这个委托方法
//Use this method instead of addTarget:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (textField.tag == 1){
//do some stuff
}
}
请参阅此堆栈溢出帖子:iOS - Adding Target/Action for UITextField Inside Custom UITableViewCell
但是你也可能会遇到一些稍微不同的问题。这行代码似乎是多余的:
[ingredientCell addSubview:ingredientCell.ingredientTextField];
你是成分细胞似乎应该已经将ingredientTextField作为子视图。这也可能会给你带来麻烦。您可以将它作为子视图添加到附加到ingredientsTableViewCell类的xib中,或者只是将其添加到代码中
[self addSubview:ingredientTextField]
希望有所帮助。
答案 1 :(得分:-1)
if (ingredientCell == nil)
{
ingredientCell = [[IngredientsTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
ingredientCell.accessoryType = UITableViewCellAccessoryNone;
[ingredientCell addSubview:ingredientCell.ingredientTextField];
[ingredientCell.ingredientTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
}
这部分看起来很多问题 尝试从if语句中取出这一行
[ingredientCell.ingredientTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
这会对你有帮助。
答案 2 :(得分:-2)
您可以在cellForRowAtIndexPath
中添加此行,并在Viewcontroller.h文件中添加UITextFieldDelegate
ingredientCell.ingredientTextField.delegate = self;
[ingredientCell.ingredientTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];
这是文本字段控制器事件
UIControlEventEditingDidBegin = 1 << 16, // UITextField
UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing