TableView行隐藏并显示为Bool函数

时间:2018-11-21 15:22:28

标签: ios swift uitableview

如图所示,当用户填写通过“成为商人”行访问的表单时,最初我需要在表视图中隐藏最后两行(我的配置文件和更新配置文件)。我需要隐藏“成为商人”行并显示最后两行。这是通过布尔函数(true / false)完成的。

check image

我该怎么办?

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
}

3 个答案:

答案 0 :(得分:1)

从数据数组中删除/添加要显示的行,然后使用表视图功能insertRowsAt / deleteRowsAt。使用performBatchUpdates函数进行批量更新。

请参阅UITableView documentation

在这种情况下,我还建议使用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

做同样的事情