2012-02-28 121 views
1

我已經使用checkaMarksAccessory創建了帶有標籤的單元格。最後幾個單元格有UITextFields可以用戶修改,並且那些在UIControlEventEditingDidEnd上有選擇器,我想要更改要檢查的單元格的狀態。contentView子視圖中的UITableViewCell

我如何獲得選擇器中的單元格?沒有對象的一些父視圖?

將對象插入單元格的方式。

UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 200, 30)]; 
    [textfield setBorderStyle:UITextBorderStyleRoundedRect]; 
    [textfield addTarget:self action:@selector(vybavaDidFinishEdit:) forControlEvents:UIControlEventEditingDidEnd]; 
    [cell.contentView addSubview:textfield]; 

回答

0

好的,所以方法是使用超級視圖。超級視圖是擁有該對象的組件。如果我想從UITextField獲取UITableViewCell,我使用了[[UITextField superview] superview]。

1

我不確定是否安全地假設cell.contentView.superview == cell。蘋果公司可能改變這一點?我對此表示懷疑。但是,我沒有看到文檔中的任何地方都說單元格的內容視圖是單元格的直接子視圖。

如果您已經添加了一個UIGestureRecognizer到您的單元格的內容視圖的子視圖中的一個,那麼你就可以得到一個對單元格引用:

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

Table View Animations and Gestures sample code使用indexPathForRowAtPoint:這種方式。

如果您必須遍歷超級視圖,我認爲使用下面的函數會更安全一些。

UITableViewCell *ACMContentViewGetCell(UIView *view) 
{ 
    while ((view = view.superview)) { 
     if ([view isKindOfClass:[UITableViewCell class]]) { 
      return (UITableViewCell *)view; 
     } 
    } 
    return nil; 
} 

但是,這個功能還是假定contentView是其cell,這也是我沒有看到文檔中的任何位置內。

因此,也許,最好的解決辦法是重新構建你的代碼,這樣你就不需要從contentView得到cell,或者如果必須,那麼從contentView子視圖添加一個實例變量cell

相關問題