我在同一個視圖控制器中有兩個表視圖。我在頂部表格視圖中顯示作者。當我選擇作者時,作者的相應書籍應顯示在底部表格視圖(書籍列表)中。處理didSelectRowatindexPath在一個ViewController中的兩個tableView
我該如何處理tableView:didSelectRowAtIndexPath:
這兩個表視圖在我的單個視圖控制器。
任何人都可以幫助我如何實現這一任務。
我在同一個視圖控制器中有兩個表視圖。我在頂部表格視圖中顯示作者。當我選擇作者時,作者的相應書籍應顯示在底部表格視圖(書籍列表)中。處理didSelectRowatindexPath在一個ViewController中的兩個tableView
我該如何處理tableView:didSelectRowAtIndexPath:
這兩個表視圖在我的單個視圖控制器。
任何人都可以幫助我如何實現這一任務。
的函數原型該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
引用。
這是否意味着你解決了你的tableview難題? :-) – 2015-03-13 18:49:46
請將上面的代碼添加到問題中。我看不懂。在didSelectRow處理程序中對單元格進行排隊看起來不對。 – 2015-03-14 18:50:49
嘿,不要低估這一點。這個問題寫得不好,但我編輯了它,我想我也添加了一個體面的答案。這是人們遇到的真正問題。 – 2015-03-13 18:01:40