子类UITableViewCell调用endEditing

时间:2015-09-28 15:37:17

标签: ios objective-c uitableview

我的表视图有几种不同类型的UITableViewCell' s - 一个用于UISwitches,一个用于UISegmentedCells,一个用于UITextField s 。所有这些UITableViewCells都有相应的子类。除了尝试从endEditing子类调用UITextField之外,所有这一切都按预期工作。如果我点击任何TextField单元格内的任何位置,则会调用它。但是,如果我单击其他单元格内部或表格外部,则永远不会调用此endEditing。我理解这是因为我现在正在接触另一个班级,但是解决这个问题的最佳方法是什么,所以无论我在哪里触摸,都会调用endEditing?此外,我尝试了touchesBegan方法 - 但这似乎只有在我触摸UITextField行内时才有效。如果我将其置于主TableViewController逻辑中,则不会调用touchesBegan方法(尽管我认为在研究之后需要这样做,因为触摸现在由所有子类处理)。

我是否需要为每个子类添加touchesBegan?这似乎有点矫枉过正。

处理此类情景的最佳方法是什么?

编辑相关代码片段如下:

TableViewController.m

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

NSString *string = [NSString stringWithFormat:@"%ld%ld", indexPath.section, (long)indexPath.row];
NSDictionary *dictElement = [pListDictionary objectForKey:string];

if (dictElement == nil)
    return nil; //if here, check your RunPhasePList.plist file and make sure it exists and isn't corrupt.

NSString *cellType = [dictElement objectForKey:@"type"];
if ([cellType isEqualToString:@"switch"])
    return [self getSwitchCellWithDict:dictElement withTableView:tableView withIndexPath:indexPath];
else if ([cellType isEqualToString:@"textField"])
    return [self getTextCellWithDict:dictElement withTableView:tableView withIndexPath:indexPath];
else if ([cellType isEqualToString:@"segmentedControl"])
    return [self getSegCellWithDict:dictElement withTableView:tableView withIndexPath:indexPath];

后来,还在TableViewController.m中:

(TextFieldTableViewCell *) getTextCellWithDict:(NSDictionary *) dict
                               withTableView:(UITableView *) tableView
                               withIndexPath:(NSIndexPath *)indexPath {
TextFieldTableViewCell *textCell;
if (dict == nil || ([dict count] == 0))
    return nil;

textCell = [tableView dequeueReusableCellWithIdentifier:@"textCell" forIndexPath:indexPath];
textCell.customLabel.text = [dict objectForKey:@"name"];
textCell.customTextField.placeholder = [dict objectForKey:@"default"];
textCell.customTextField.text = [dict objectForKey:@"userEntry"];

textCell.customTextField.tag = TAG_OFFSET_ENTRY + (indexPath.section * 10) + (indexPath.row);
textCell.customButtonQuestion.tag = TAG_OFFSET_QUESTION + (indexPath.section * 10) + (indexPath.row);
return textCell;

TextFieldTableViewCell.m

(BOOL) textFieldShouldReturn:(UITextField *)textField {
[customTextField resignFirstResponder];
return YES; }

(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.superview endEditing:YES]; }

(void) textFieldDidEndEditing:(UITextField *)textField {
NSLog(@"in here now");
//do other stuff }

0 个答案:

没有答案