单个 UIViewcontroller 中的两个 UITableView 无法正常工作

Two UITableView in single UIViewcontroller not working properly

我想在app show pict中实现以下功能

但我有以下问题显示另一张照片

我的代码如下

 // MARK:  UITextFieldDelegate Methods
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if str == "Loading"{
            return 0
        }else if tableView == tbl2{
            return arrSub.count
        }else{
                return self.displayData.count
        }
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:customCellInvitation = self.tableView.dequeueReusableCellWithIdentifier("cell")as! customCellInvitation
        if tableView == tbl2{
//Code for the load secind table
            cell.lblUserName.text = self.arrSub.objectAtIndex(indexPath.row).valueForKey("username") as?String
            cell.btnAdd.setImage(UIImage(named: "yes1.png"), forState:(UIControlState.Normal))
            return cell
        }else{
//Code for the load first table
            cell.lblUserName.text = self.displayData.objectAtIndex(indexPath.row).valueForKey("username") as?String
            cell.btnAdd.setImage(UIImage(named: "add.png"), forState:(UIControlState.Normal))
            cell.btnAdd.setImage(UIImage(named: "yes1.png"), forState:(UIControlState.Selected))
            cell.btnAdd.addTarget(self, action: "addData:", forControlEvents: .TouchUpInside)
            cell.btnAdd.tag  = indexPath.row
        }
        return cell
    }


    // MARK:  UITableViewDelegate Methods
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 44
    }
    //function call when user click Plus button
    func addData(sender: UIButton!) {
          arrSub .addObject(self.displayData .objectAtIndex(sender.tag))
        var button:UIButton = sender.viewWithTag(sender.tag) as! UIButton
        button.selected=true
        button.userInteractionEnabled = false
        NSLog("%@", arrSub)

        [tbl2 .reloadData()]
    }

我建议您将 tableView 数据源和委托移动到单独的 类。这根本不是一个好习惯。你肯定会搞砸你的代码。

你正在做的事情使代码变得复杂,你可以为 tableView 添加你自己的自定义 class 并且可以维护它所有委托数据源 methods.Add 当前 class 中的 tableview 和给它框架。通过这种方式,您可以将尽可能多的表格视图添加到单个 class 中,而无需担心数据处理。

将框架添加到此 table 视图,然后您可以将两个框架添加到视图控制器。所以将这个框架添加到您的视图控制器,您应该调整框架的宽度和高度以显示两个 table。

class ViewController: UIViewController {

lazy var tableView: UITableView = {
    let tableView = UITableView()
    tableView.delegate = self
    tableView.dataSource = self
    tableView.separatorStyle = .None
    tableView.frame = CGRectMake(20, (self.view.frame.size.height - 54 * 5) / 2.0, (self.view.frame.size.width - 25 * 5), 54 * 5)
    tableView.autoresizingMask = .FlexibleTopMargin | .FlexibleBottomMargin | .FlexibleWidth
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    tableView.opaque = false
    tableView.backgroundColor = UIColor.clearColor()
    tableView.backgroundView = nil
    tableView.bounces = false
    tableView.showsVerticalScrollIndicator = true

    return tableView
    }()


override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = UIColor.clearColor()
    view.addSubview(tableView)

}

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


}


// MARK : TableViewDataSource & Delegate Methods

extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource {


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 6
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 54
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

    let titles: [String] = ["Home", "Features", "Pricing", "Help", "About Us", "Contact Us"] // put your titles

    let images: [String] = ["IconHome", "IconCalendar", "IconProfile", "IconSettings", "IconEmpty", "IconEmpty"] // add images if you want

    cell.backgroundColor = UIColor.clearColor() // optional 
    cell.textLabel?.font = UIFont(name: "HelveticaNeue", size: 21)
    cell.textLabel?.textColor = UIColor.whiteColor()
    cell.textLabel?.text  = titles[indexPath.row]
    cell.selectionStyle = .None
    cell.imageView?.image = UIImage(named: images[indexPath.row])


    return cell
}

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

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    switch indexPath.row {
    case 0:
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewControllerWithIdentifier("TabBar") as! UIViewController

        sideMenuViewController?.contentViewController = viewController

        sideMenuViewController?.hideMenuViewController()
        break // show table navigation view controller 
    case 1:

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewControllerWithIdentifier("TabBar") as! UIViewController

        sideMenuViewController?.contentViewController = viewController

        sideMenuViewController?.hideMenuViewController()
        break // show table navigation view controller
    default:
        break
     }


  }

}
    // MARK:  UITextFieldDelegate Methods

      func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            var cell:customCellInvitation = self.tableView.dequeueReusableCellWithIdentifier("cell")as! customCellInvitation
       if tableView == tbl2{
                cell.lblUserName.text = self.arrSub.objectAtIndex(indexPath.row).valueForKey("username") as?String
          if str = "yes"{ 
                   cell.btnAdd.setImage(UIImage(named: "yes1.png"), forState:(UIControlState.Normal))

          }else{
                   cell.btnAdd.setImage(UIImage(named: "NO.png"), forState:(UIControlState.Normal))
          }
      return cell
       }else{
         cell.lblUserName.text = self.displayData.objectAtIndex(indexPath.row).valueForKey("username") as?String
             if str = "yes"{ 
               cell.btnAdd.setImage(UIImage(named: "yes1.png"), forState:(UIControlState.Normal))
      }else{
         cell.btnAdd.setImage(UIImage(named: "NO.png"), forState:(UIControlState.Normal))
      }
    }
    return cell
  }