2017-06-13 59 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,并且我正在编辑我的切换答案。 –