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

fru*_*der 5 objective-c uitableview uitextfield first-responder

我使用 UITableViewController 来显示 KoreanFood 的详细信息。第一个单元格是一个自定义 UITableViewCell (OverviewCell),带有一个图像和两个 UITextField,我在 Storyboard (AutoLayout) 中创建并布局了它。

我像这样子类化 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;
Run Code Online (Sandbox Code Playgroud)

我在 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;
    }
Run Code Online (Sandbox Code Playgroud)

BOOL 的注释是 NO,我只是不知道为什么......当我设置文本并且它显示正确时,我知道 Outlets 已设置并且 Cell 不为零(我检查过)。

为什么这没有成为第一响应者?

我还在 OverviewCell 子类中尝试了一些建议,例如命中测试或实现 setSelected: / setEditing: 方法。但是这里的textField 的becomeFirstResponder 也不会改变任何东西。

jle*_*ehr 4

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

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

overviewCell.koreanTitleTF.enabled = NO;
Run Code Online (Sandbox Code Playgroud)