2017-06-13 76 views
0

我想使用XMSegmentController(https://cocoapods.org/?q=segmen)更改不同的tableview,我不知道我的程序中缺少什麼,這導致我運行時發生黑屏。有誰知道要添加到我的程序中?謝謝。使用segmentcontroller來更改tableview

這裏是MT代碼:

import UIKit 
import XMSegmentedControl 

class ViewController: UIViewController, XMSegmentedControlDelegate,UITableViewDelegate,UITableViewDataSource { 

    @IBOutlet weak var segmentedControl1: XMSegmentedControl! 
    @IBOutlet weak var tableview1: UITableView! 
    @IBOutlet weak var tableview2: UITableView! 

    let one = ["1","2","3"] 
    let two = ["4","5","6"] 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     segmentedControl1.delegate = self 
     segmentedControl1.segmentTitle = ["One", "Two"] 

    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCell(withIdentifier: "left", for: indexPath) 
      cell.textLabel?.text = one[indexPath.row] 
      return cell 
     }else { 
      let cell = tableView.dequeueReusableCell(withIdentifier: "right", for: indexPath) 
      cell.textLabel?.text = two[indexPath.row] 
      return cell 
     } 
    } 


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     if tableView == self.tableview1 { 
      return one.count 
     } 
     return two.count 

    } 

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 


    func xmSegmentedControl(_ xmSegmentedControl: XMSegmentedControl, selectedSegment: Int) { 
     if xmSegmentedControl == segmentedControl1 { 
      print("SegmentedControl1 Selected Segment: \(selectedSegment)") 

     } 
    } 
} 
+0

我會使用一個容器視圖控制器與兩個'UITableViewController'作爲它的子。當您想要添加更多細分時,它更加靈活。 – Koen

回答

1

將您的控制器設置爲初始ViewController以顯示您的控制器。現在使用代理方法的selectedSegment參數和hide/show根據它的tableView

func xmSegmentedControl(_ xmSegmentedControl: XMSegmentedControl, selectedSegment: Int) { 
    if xmSegmentedControl == segmentedControl1 { 
     tableview1.isHidden = selectedSegment != 0 
     tableview2.isHidden = selectedSegment != 1 
    } 
} 

,而不是使用兩個tableView可以使用單tableView這樣也。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if segmentedControl1.selectedSegment == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "left", for: indexPath) 
     cell.textLabel?.text = one[indexPath.row] 
     return cell 
    }else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "right", for: indexPath) 
     cell.textLabel?.text = two[indexPath.row] 
     return cell 
    } 
} 


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    if segmentedControl1.selectedSegment == 0 { 
     return one.count 
    } 
    return two.count 

} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

而且在xmSegmentedControl委託方法只需重新加載的tableView。

func xmSegmentedControl(_ xmSegmentedControl: XMSegmentedControl, selectedSegment: Int) { 
    if xmSegmentedControl == segmentedControl1 { 
     tableView.reloadData() 
    } 
} 
+0

謝謝你解決我的問題! –

+0

@廖豪豪歡迎隊友:)另外檢查編輯後的答案,忽略多個tableView的使用 –

+0

我想試試,等你回覆,謝謝 –

1

什麼是你最初的ViewController可以請你在你的故事板檢查?

設置初始視圖控制器。

func xmSegmentedControl(_ xmSegmentedControl: XMSegmentedControl, selectedSegment: Int) { 
    if xmSegmentedControl == segmentedControl1 { 
     tableviewOne.isHidden = selectedSegment != 0 
     tableviewSecond.isHidden = selectedSegment != 1 
    } 
} 
+0

在我的故事板中只有ViewController,並且初始viewcontroller是ViewController –

+0

Opps,我忘了做你說的,但如何切換tableview? –

+0

是的,我想你忘了添加一個初始的viewcontroller.do,並且我正在編輯我的切換答案。 –