从sidemenu用户类型明智删除索引

时间:2018-10-03 05:30:17

标签: swift uitableview didselectrowatindexpath

我已经在tableview中实现了侧边菜单,现在我的情况就像,我必须根据用户类型来管理侧边菜单选项

让我展示我的代码

var items = ["Social Media Post", "Messages", "Manage User","My Account","Information","Logout"]



 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! MenuTableViewCell
        cell.lblTitle.text = items[indexPath.row]
        cell.imgMenuLogo.image = image[indexPath.row]
        print(User_type)
        if User_type == 2{
            items.remove(at: 0)
        }
        return cell
    }

但是现在我想要。喜欢这样

   if user_type == "3"{
    // Social Media , Messages And Manage User options i want to remove 

}

我不明白如何从索引中删除。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

override func viewDidLoad() {
    super.viewDidLoad()
    getList()
}

func getList(){
    switch userType{
    case 0:
        items = ["UserTypeOne_Home","UserType_One Settings","etc"]
        break
    case 1:
        items = ["UserTypeTwo_Home","UserType_Two Settings","etc"]
        break
    default:
        break
    }
    self.tableView.reloadData()
}


extension ViewController: UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "Some ID")
    cell?.textLabel?.text = items[indexPath.row]
    return cell!
}
}

尽量不要使用indexPath.row从cellForRowAt indexPath方法内部更改数组,这不会给您想要的结果。从协议方法覆盖的外部调制数组,只需调用reloadData()方法即可。

答案 1 :(得分:0)

尝试使用UserType枚举并检查当前用户的类型,而不是使用每个用户都可以使用具有默认选项的数组,然后根据用户类型在数组中附加特定数据。希望它能澄清一下:)

答案 2 :(得分:0)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! MenuTableViewCell
    cell.lblTitle.text = items[indexPath.row]
    cell.imgMenuLogo.image = image[indexPath.row]
    print(User_type)
    if User_type == 2{
        items.remove(at: 0)
    }
    return cell
}

这将起作用,但是您在这里犯了一个小错误。

设置标签后,您已从阵列中删除。因此,您需要先从数组中删除该项目,然后再设置标签。

顺便说一句,我不建议您使用此方法,因为您需要为每个cellForRowAt方法从数组中添加/删除。