未调用UITextField的委托方法

时间:2015-09-17 02:46:54

标签: ios objective-c uitableview uitextfield

我有一个带有- (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}}

3 个答案:

答案 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