我已经在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
}
我不明白如何从索引中删除。
答案 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
方法从数组中添加/删除。