2015-03-13 37 views
0

我在同一個視圖控制器中有兩個表視圖。我在頂部表格視圖中顯示作者。當我選擇作者時,作者的相應書籍應顯示在底部表格視圖(書籍列表)中。處理didSelectRowatindexPath在一個ViewController中的兩個tableView

我該如何處理tableView:didSelectRowAtIndexPath:這兩個表視圖在我的單個視圖控制器。

任何人都可以幫助我如何實現這一任務。

+0

嘿,不要低估這一點。這個問題寫得不好,但我編輯了它,我想我也添加了一個體面的答案。這是人們遇到的真正問題。 – 2015-03-13 18:01:40

回答

0

的函數原型該UITableViewDelegate方法如下:

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

即第一個參數是在其中選擇該行的UITableView。因此,在你實現你可以簡單地這樣做:

// Assuming you have two instances in your viewcontroller like this 
var tableViewOne: UITableView! 
var tableViewTwo: UITableView! 

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if tableView == tableViewOne { 
     // User selected a row in tableviewOne 
    } else if tableView == tableViewTwo { 
     // User selected a row in tableviewTwo 
    } 
} 

如果因爲你結合的邏輯有兩個UITableViewDelegate s轉換一個視圖 - 控制你的代碼變得混亂,那麼你還可以創建過程中的單獨的對象。

class FirstTableViewDelegate: UITableViewDelegate { 
    func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     // User selected a row in tableviewOne 
    } 
} 

class SecondTableViewDelegate: UITableViewDelegate { 
    func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     // User selected a row in tableviewTwo 
    } 
} 

class YourViewController: UITableViewController { 
    var firstDelegate: FirstTableViewDelegate! 
    var secondDelegate: SecondTableViewDelegate! 

    override func viewDidLoad() { 
     firstDelegate = FirstTableViewDelegate() 
     tableViewOne.delegate = firstDelegate 

     secondDelegate = SecondTableViewDelegate() 
     tableViewTwo.delegate = secondDelegate 
    } 
} 

請注意,您必須保持在實例變量代表在自己的UIViewController。如果您只是在本地創建它們或僅將它們分配給UITableView,那麼它們將立即釋放,因爲代理是weak引用。

+0

這是否意味着你解決了你的tableview難題? :-) – 2015-03-13 18:49:46

+0

請將上面的代碼添加到問題中。我看不懂。在didSelectRow處理程序中對單元格進行排隊看起來不對。 – 2015-03-14 18:50:49

相關問題