当superview userinteraction禁用swift时,子视图userinteraction

时间:2016-09-26 07:20:18

标签: ios iphone swift cocoa-touch

我想保持子视图(在这种情况下为UITextFields)仍处于活动状态(以常规方式编辑,即点击textField并出现键盘),而作为UITableViewCell的userInteractionEnabled的父视图设置为false。

进一步解释 - 1.有一个从xib初始化的UITableViewCell。

  1. 在这个单元格中,我有三个UITextFields和一个UIButton。
  2. 在某些情况下,我需要禁用单元格交互(以避免didSelectRowAtIndexPath) - 这部分,我没有任何问题。
  3. 在第3步之后,单元格内的所有子视图也会被禁用。
  4. 但是我需要在textFields中输入一些文本,然后点击按钮并执行一些操作。
  5. 到目前为止我做了什么: 1.使用userInteractionEnabled并将其设置为false为单元格 -

    myPersonalInfoExpandedCell.userInteractionEnabled = false
    

    2。两个textFields firstNameText和lastNameText,我启用了userInteraction并将firstNameText设置为firstFirstResponder

     (myPersonalInfoExpandedCell as! PersonalInfoExpandedCell).firstNameText.userInteractionEnabled = true
     (myPersonalInfoExpandedCell as! PersonalInfoExpandedCell).lastNameText.userInteractionEnabled = true
     (myPersonalInfoExpandedCell as! PersonalInfoExpandedCell).firstNameText.becomeFirstResponder()
    

    问题是,对于textFields,userInteractionEnabled无效,我怀疑因为userInteractionEnabled对于TableViewCell是假的。 becomeFirstResponder()适用于firstNameText,但我需要与单元格内的所有UI元素进行互动。

    我们怎么能这样做?请有人帮忙吗?

1 个答案:

答案 0 :(得分:2)

要禁用cellSelection,请执行willSelectRowAtIndexPath委托方法,并为您不想选择的单元格返回nil。你说你想在某些条件下禁用选择,所以我假设你有要为其禁用选择的行的indexPaths。只需为这些indexPath返回nil。请参阅以下代码。

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath == self.MyIndex) //Check for the index path for the cell you want to disable selection for
   return nil;
else
   return indexPath;
}

此外,还可以防止单元格突出显示。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

这样做你不必在单元格上设置setUserInteractionEnabled:NO。这样,当你点击单元格时,didSelectRowAtIndexPath委托方法不会被调用,你的textFields仍然会被启用

修改

以下是上述代码的快速版本

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
if (indexPath == self.MyIndex) //Check for the index path for the cell you want to disable selection for
    return nil;
else
    return indexPath;
}


cell.selectionStyle = .None