2016-09-21 70 views
0

我是新來的Swift,我想創建Tableview,我只有3行(早上,下午和晚上)。如果我點擊Morning行,我的單元格必須展開。它必須顯示keynumber時間8 - 12的用戶號碼。相同的下午和晚上。在UITableView單元格內如何顯示指定的數組數據

我指定了數組數據User[]其中keynumber,時間和其他數據在那裏。

我試圖用if條件處理cellForRowAtIndexPath,但它只顯示Morning行的一個用戶鍵。它在該特定時間限制內不顯示其他用戶密鑰。

回答

0

有一個嘗試,就像這裏

struct User { 
    var keynumber: Int 
    var time: NSData 
} 

class TableViewController: UITableViewController { 

var userArr : Array<User> = [] //raw user data 

var sortedUser : [String : Array<User>] = ["Morning": [], "Afternoon": [], "Night": []] 
var sectionStatusArr : [String: Bool] = ["Morning": false, "Afternoon": false, "Night": false] // section status array used to control expanding 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //classify user into corresponding group(time zone) 
    for _ in 0...19 { 
     let randomKey = Int(arc4random()%23) 
     let user = User(keynumber: randomKey, time: NSData()) 

     userArr.append(user) 
    } 

    //sort user: 8-12 -> morning, 13-18 -> afternoon, 19-8 -> night 
    for user in userArr{ 
     switch user.keynumber { 
     case 8,9,10,11,12: 
      sortedUser["Morning"]?.append(user) 
     case 13,14,15,16,17,18: 
      sortedUser["Afternoon"]?.append(user) 
     default: 
      sortedUser["Night"]?.append(user) 
     } 
    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Table view data source 

override func numberOfSections(in tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return sortedUser.keys.count 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 


    var rowcount = 0 
    var shouldExpandSection = false 
    switch section { 
    case 0: 
     rowcount = (sortedUser["Morning"]?.count)! 
     shouldExpandSection = sectionStatusArr["Morning"]! 
    case 1: 
     rowcount = (sortedUser["Afternoon"]?.count)! 
     shouldExpandSection = sectionStatusArr["Afternoon"]! 
    default: 
     rowcount = (sortedUser["Night"]?.count)! 
     shouldExpandSection = sectionStatusArr["Night"]! 
    } 
    return shouldExpandSection ? rowcount : 0 
} 

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

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 60 
} 

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let header = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 60)) 

    let nameBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 375, height: 60)) 
    nameBtn.backgroundColor = UIColor.cyan 
    nameBtn.tag = section 
    nameBtn.addTarget(self, action: #selector(self.headerTouched(sender:)), for: .touchUpInside) 

    switch section { 
    case 0: 
     nameBtn.setTitle("Morning", for: .normal) 
    case 1: 
     nameBtn.setTitle("Afternoon", for: .normal) 
    default: 
     nameBtn.setTitle("Night", for: .normal) 
    } 

    header.addSubview(nameBtn) 

    return header 
} 

func headerTouched(sender:UIButton){ 
    switch sender.tag { 
    case 0: 
     sectionStatusArr["Morning"] = !sectionStatusArr["Morning"]! 
    case 1: 
     sectionStatusArr["Afternoon"] = !sectionStatusArr["Afternoon"]! 
    default: 
     sectionStatusArr["Night"] = !sectionStatusArr["Night"]! 
    } 
    self.tableView.reloadData() 
} 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    var sectionArr : Array<User>= [] 
    switch indexPath.section { 
    case 0: 
     sectionArr = sortedUser["Morning"]! 
    case 1: 
     sectionArr = sortedUser["Afternoon"]! 
    default: 
     sectionArr = sortedUser["Night"]! 
    } 

    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 

    for subview in cell.subviews{ 
     subview.removeFromSuperview() 
    } 

    let lab = UILabel(frame: CGRect(x: 0, y: 0, width: 375, height: 40)) 
    lab.text = "Un:" + String(sectionArr[indexPath.row].keynumber) 
    lab.textAlignment = .center 
    cell.addSubview(lab) 

    return cell 
} 

} 
+0

這是如何工作的:切換user.keynumber?另外我得到#selector錯誤(self.headerTouched(發件人:)) –

+0

這是一個簡單的開關用例。根據您的分類規則:早上 - [8:00 - 12:00],下午 - [12:00 - 18:00],晚上 - [18:00 - 8:00]。你的IDE是什麼,這個代碼在Xcode8和Swift3.0中起作用。一旦我重新開始工作,我將在明天附上整個項目 –

+0

整個項目可以從[這裏]下載(https://github.com/Millionaryearl/Stack-Overflow/tree/master/TableVC) –

1

魅力試試這個

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet var tableView: UITableView! 
    var items: [String] = ["We", "Heart", "Swift"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
    } 


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.items.count; 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

     cell.textLabel?.text = self.items[indexPath.row] 

     return cell 
    } 

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
     print("You selected cell #\(indexPath.row)!") 
    } 
} 

希望這有助於。

相關問題