如图所示,当用户填写通过“成为商人”行访问的表单时,最初我需要在表视图中隐藏最后两行(我的配置文件和更新配置文件)。我需要隐藏“成为商人”行并显示最后两行。这是通过布尔函数(true / false)完成的。
我该怎么办?
var arrdata = ["Home", "Orders", "Change Password", "Log Out", "Become A Merchant", "My Profile", "Update Profile"]
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var isMerchantProfile: Bool = UserDefaults.standard.bool(forKey: "isFillMerchant")
if isMerchantProfile == true {
return 4
}
return arrdata.count
}
答案 0 :(得分:1)
从数据数组中删除/添加要显示的行,然后使用表视图功能insertRowsAt
/ deleteRowsAt
。使用performBatchUpdates
函数进行批量更新。
在这种情况下,我还建议使用enum
来定义行,而不是使用代表行标题的原始字符串。
例如(在您的视图控制器类内部很好)
enum Row {
case home, orders, changePassword, logout, becomeMerchant, myProfile, updateProfile
var title: String {
switch self {
case .home:
return NSLocalizedString("Home", comment: "Row title")
// … etc
}
}
}
然后,找到要删除的行/在其中插入行并保持代码整洁的位置会容易一些。
答案 1 :(得分:0)
当调用reloadTable以匹配预期的行为时,我将调整数据/数组。
var arrdata = [“首页”,“订单”,“更改密码”,“注销”,“我的个人资料”,“更新个人资料”],然后再进行更新:
var arrdata = [“主页”,“订单”,“更改密码”,“注销”,“成为商人”,“我的个人资料”,“更新个人资料”]。
答案 2 :(得分:0)
我认为首先您需要确定用户是否已填写表格。也许使用具有不同用户级别的枚举类型来显示不同的内容。所以也许像这样。
enum UserType {
case basic
case merchant
}
然后,当您将数据加载到表视图中时,只需打开UserType并加载正确的数据集。如果您需要根据用户类型添加/删除数据/视图,则可以在整个应用程序的其他位置使用此实现。所以您的菜单看起来像这样:
let basicUserMenu = ["Home", "Orders", "Change Password", "Log Out", "Become Merchant"]
let merchantUserMenu = basicUserMenu + ["My Profile", "Update Profile"]
然后您的表视图实现将如下所示,其中 userType 是您存储的UserType枚举值。默认情况下,它将是.basic,但是在用户填写表格后,成功将其更改为.merchant
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch userType {
case .basic:
return basicUserMenu.count
case .merchant:
return merchantUserMenu.count
}
}
然后对 cellForTowAtIndexPath
做同样的事情