2012-11-21 34 views
0

我有一個UITableView,它由我自己定製的UITableViewCell組成,分爲CustomCell。我向該單元格添加UITextField,並在某些事件(來自文本字段)上運行方法。Access Subclassed Superview?

當此方法運行時,我需要訪問CustomCell,該文本字段是子視圖。

所以我想,我怎樣才能訪問文本字段(CustomCell)的父視圖?

我已經試過這個,獲取文本字段,該方法的發件人,然後從那裏得到它的超級視圖。

CustomTextField *textField = sender; 
    CustomCell *cell = (CustomCell *)[textField superview]; 

但是失敗了,當我嘗試訪問我的手機,應用程序崩潰的財產,我得到這個在控制檯:[UIView myLabel]: unrecognized selector sent to instance。 (myLabel是我想要訪問的單元格上的屬性。)

任何幫助都可以解決爲什麼這種方法無效或者訪問該單元格的替代方法將不勝感激,謝謝。

回答

1

你不應該添加你的意見作爲UITableViewCell的直接子視圖。相反,您應該將它們添加爲單元格的contentView的子視圖。如果你把你的單元格放在一個xib中,Interface Builder會自動爲你處理這個問題。所以一般來說,你不應該指望這個單元格是你的文本字段的直接超級視圖。

我會在以下兩種方式之一處理這個問題:

  1. CustomTextField弱屬性,引用其含有CustomCell。然後你可以問文本字段的單元格。如果您使用的是xib,請將該屬性設置爲IBOutlet並將其連接到xib中。如果您使用代碼創建單元格,請在創建單元格和文本字段時將代碼屬性設置爲代碼。

  2. 沿着視圖層次結構尋找CustomCell祖先。

    CustomCell *cell = textField.superview; 
    while (cell && ![cell isKindOfClass:[CustomCell class]]) { 
        cell = [cell superview]; 
    }