滚动或触摸表格后,UITableView上的单元格消失

时间:2019-01-29 18:01:17

标签: ios swift uitableview

我正在实现SwipeMenuViewController,并且当用户开始滚动或点击单元格时,该单元格消失了。我不确定这是由于tableView实施不正确还是SwipeMenuViewController实施不正确造成的。

在滑动/触摸表格之前,您会看到表格已加载数据

enter image description here

但是。一旦我们开始滑动甚至触摸桌子,上一个单元格就会消失:

enter image description here

我已将表视图实现为ViewController,如下所示

var currentUser: User!
var requests = [User]() 
var myTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    myTableView = UITableView(frame: CGRect(x: 0, y: 0, width: tableSize.width, height: tableSize.height))
    myTableView.register(UINib(nibName: "FriendRequestTableViewCell", bundle: nil), forCellReuseIdentifier: "friendRequest")
    myTableView.dataSource = self
    myTableView.delegate = self
    //myTableView.separatorStyle = .none
    myTableView.rowHeight = 103
    myTableView.backgroundColor = Colours.flatColour.main.offWhite
    self.view.addSubview(myTableView)

}

协议方法:

// MARK: - Table view data source

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

    if (self.requests.count == 0) {
        self.myTableView.setEmptyMessage("You are up to date!\nYou dont have any notifications ")
    } else {
        self.myTableView.restore()
    }

    return requests.count
}

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

    let cell = Bundle.main.loadNibNamed("FriendRequestTableViewCell", owner: self, options: nil)?.first as! FriendRequestTableViewCell

    cell.currentUser = currentUser
    cell.requestFriendDelegate = self
    cell.user = requests[indexPath.row]

    return cell

}

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

有人对我哪里出错了有想法,我不确定是否丢失任何代码。 SwipeMenuViewController的示例未显示这种实现方式。我已按照“自述文件”中的内容实施SwipeMenuView。我有两个ViewController,一个保存SwipeMenuView,一个保存每个选项卡的表,这是我认为问题出处的控制器。谢谢您的帮助

notificationsViewController类:

class NotificationsViewController: UIViewController, SwipeMenuViewDelegate {

@IBOutlet weak var swipeMenuView: SwipeMenuView! {
    didSet {
        swipeMenuView.delegate = self
        swipeMenuView.dataSource = self
        var options: SwipeMenuViewOptions = .init()
        options.tabView.style = .flexible
        options.tabView.margin = 20.0
        options.tabView.additionView.backgroundColor = Colours.flatColour.yellow.lighter //UIColor.black//UIColor.customUnderlineColor
        options.tabView.itemView.textColor = Colours.flatColour.main.gray
        options.tabView.itemView.selectedTextColor = Colours.flatColour.yellow.lighter //UIColor.black//UIColor.customSelectedTextColor
        options.tabView.itemView.font = UIFont(name: "Biotif-Medium", size: 14)!

        swipeMenuView.reloadData(options: options)
    }
}

var tabTitles: [String] = ["All", "Friend Requests", "Items"]
var requests = [User]()

}

我再次reloadData填充请求数组并且该数组不为空时。 数据源方法:

extension NotificationsViewController: SwipeMenuViewDataSource {

//MARK - SwipeMenuViewDataSource
func numberOfPages(in swipeMenuView: SwipeMenuView) -> Int {
    return tabTitles.count
}

func swipeMenuView(_ swipeMenuView: SwipeMenuView, titleForPageAt index: Int) -> String {
    return tabTitles[index]
}

func swipeMenuView(_ swipeMenuView: SwipeMenuView, viewControllerForPageAt index: Int) -> UIViewController {
    let vc = NotificationsContentTable()
    vc.currentUser = currentUser
    vc.tableSize = swipeMenuView.bounds.size
    if index == 0 {
        vc.requests = requests
    }else if index == 1 {
        vc.requests = []
    }else if index == 2 {
        vc.requests = []
    }
    print("the requests are in = \(vc.requests)")
    return vc
}

}

1 个答案:

答案 0 :(得分:0)

我弄清楚了我要去哪里。在返回viewControllerForPageAt中的viewController之前,必须将该viewController作为带有addChild(viewController)的子级添加。