2016-04-27 50 views
0

我有一個自定義的tableViewCell,有兩個用戶輸入的textViews。我想檢測用戶在哪個tableView行。我試過:用自定義表格視圖檢測用戶在哪個單元格

let currentIndexPath = tableView.indexPathForSelectedRow! 

let currentCell = tableView.cellForRowAtIndexPath(currentIndexPath) as! Test2TableViewCell 

和Xcode給我錯誤,fatal error: unexpectedly found nil while unwrapping an Optional value對我來說,這意味着應用程序找不到選定的行。我假設,當一個用戶在tableViewCell頂部輸入一個textView時,該應用程序沒有看到你點擊實際的單元格。 有沒有辦法檢測用戶在哪一行?

+0

這段代碼是在你的單元類還是在你的tableview類中? – Paulw11

+0

這段代碼在我的tableView類中@ Paulw11 –

+0

我建議你添加一個屬性到你的tableviewcell類中,該類保存對它涉及到的數據模型對象的引用,並將UITextViewDelegate方法移入tableviewcell類。然後,實現一個協議,允許單元通知視圖控制器文本已經改變,或其他。視圖控制器可以直接從單元訪問數據模型屬性,不需要知道行號。存儲行號很麻煩,如果表可以重新排序(行刪除,插入或移動) – Paulw11

回答

1

考慮使用所有UIView子類中存在的標籤屬性。

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("CustomCell"){ 
     cell.textView.tag = indexPath.row 

    } 
} 

internal func textViewDidBeginEditing(textView: UITextView){ 
    let row = textView.tag 
} 
+0

感謝您的幫助,亞歷克斯!現在我想到了更多,我不能使用我發佈的問題,因爲我的最終目標需要別的東西。如果您有時間,請查看我剛剛發佈的新問題:http://stackoverflow.com/questions/36903652/getting-data-from-all-tableviewcells。我感謝幫助! –

1

你說得對,當你在單元格中輸入UITextField時,單元格沒有被選中。

完成此操作的一種快速方法是將該行保存爲UITextView的標記,然後在textViewDidFinish ...委託方法中創建索引路徑,並將該部分和標記作爲行。

或者,您可以爲每個唯一的textView創建一個變量,然後通過比較兩者來比較您在textViewDidFinish委託方法中使用的textView。

+0

感謝您的幫助,Alex!現在我想到了更多,我不能使用我發佈的問題,因爲我的最終目標需要別的東西。如果您有時間,請查看我剛剛發佈的新問題:http://stackoverflow.com/questions/36903652/getting-data-from-all-tableviewcells。我感謝幫助! –

2

您可以檢查它的權利在使用阻擋了您的cellForRow方法:

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("CustomCell"){ 
     cell.editingDidBeginHandler = { [self weak], text 
      //do your stuff, save index path, or tag or something else. 
     } 

    } 
} 

裏面你的UITableViewCell子類:

var editingDidBeginHandler:(()->())? 

internal func textViewDidBeginEditing(textView: UITextView){ 
    if let handler = editingDidBeginHandler { editingDidBeginHandler() } 
} 
+0

感謝您的幫助,Alex!現在我想到了更多,我不能使用我發佈的問題,因爲我的最終目標需要別的東西。如果您有時間,請查看我剛剛發佈的新問題:http://stackoverflow.com/questions/36903652/getting-data-from-all-tableviewcells。我感謝幫助! –

0

可以TextView的點轉換到餐桌角度來確定其索引路徑。

func textViewDidBeginEditing(textView: UITextView) { 
    let pointInTable = textView.convertPoint(textView.bounds.origin, toView: yourTableView) 
    let textViewIndexPath = yourTableView.indexPathForRowAtPoint(pointInTable) 
    // do something else 
} 

這是假設您將文本視圖委託設置爲表視圖。

如果您將文本視圖委託設置爲您的自定義單元格,那麼您需要在自定義單元格內捕獲textViewDidBeginEditing函數,然後使用協議將該事件傳遞給表視圖。

+0

感謝您的幫助,Alex!現在我想到了更多,我不能使用我發佈的問題,因爲我的最終目標需要別的東西。如果您有時間,請查看我剛剛發佈的新問題:http://stackoverflow.com/questions/36903652/getting-data-from-all-tableviewcells。我感謝幫助! –

相關問題