UITableViewCell中的UITextField不会成为第一响应者

时间:2013-05-29 22:27:23

标签: objective-c uitableview uitextfield first-responder

我的App有一个奇怪的问题。在我阅读了关于几乎相同问题的所有问题后,我仍然无法找到解决问题的方法。 我使用UITableViewController来显示KoreanFood的细节。第一个单元格是一个自定义的UITableViewCell(OverviewCell),带有一个Image和两个UITextFields,我在Storyboard(AutoLayout)中创建和布局。看起来像这样

https://dl.dropboxusercontent.com/u/28177144/Screen%20Shot%202013-05-29%20at%2023.39.46.png (对不起,我无法嵌入图片,但我还没有10个声誉)

我将UITableviewCell子类化为:

OverviewCell.h
@interface OverviewCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UITextField *englishTitleTF;
@property (strong, nonatomic) IBOutlet UITextField *koreanTitleTF;
@property (strong, nonatomic) IBOutlet UIImageView *myImageView;
@property (strong, nonatomic) UIImage *thumbnail;

Storyboard中的文本字段设置为启用/ UserInteractionenabled,代理是我的TVC。当我创建单元格时,我也在代码中执行此操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == GENERAL_SECTION) {
        static NSString *overviewCellID = @"overviewCell";
        OverviewCell *overviewCell = [tableView dequeueReusableCellWithIdentifier:overviewCellID forIndexPath:indexPath];

        overviewCell.englishTitleTF.text = self.generalInfo.titleEnglish;
        overviewCell.koreanTitleTF.text = self.generalInfo.titleKorean;
        overviewCell.englishTitleTF.enabled = YES;
        overviewCell.koreanTitleTF.enabled = NO;
        //BOOL test = [overviewCell.englishTitleTF becomeFirstResponder];
        overviewCell.koreanTitleTF.delegate = self;
        overviewCell.englishTitleTF.delegate = self;

        UIImageView *imageView = [[UIImageView alloc] initWithImage:self.generalInfo.thumbnail];
        overviewCell.myImageView = imageView;
        overviewCell.myImageView.frame = CGRectMake(25, 25, 95, 95);
        [overviewCell addSubview:overviewCell.myImageView];

        return overviewCell;
    }

BOOL的注释是NO,我只是不知道为什么......当我设置文本并且显示正确时,我知道Outlet已设置且Cell不是nil(我检查过) 。 为什么 * *不会成为第一响应者? 我还在OverviewCell子类中尝试了一些建议,比如命中测试或实现setSelected:/ setEditing:方法。但是这里的textField的becomeFirstResponder也不会改变任何东西。

任何帮助都会非常感激,我对此非常绝望。

1 个答案:

答案 0 :(得分:4)

在将视图添加到响应程序链之前,视图不能成为第一响应者,当视图作为应用程序对象的窗口列表中的窗口中的视图的子视图添加时,该视图会自动发生。换句话说,您的单元格尚未添加到表格视图中,因此它没有连接到任何内容,因此无法成为第一响应者。

尝试从表视图加载完其单元格后调用的方法发送becomeFirstResponder。当然,不要这样做:

overviewCell.koreanTitleTF.enabled = NO;