如何让 UITableView 继承 UIViewController 的自定义子类?

Posted

技术标签:

【中文标题】如何让 UITableView 继承 UIViewController 的自定义子类?【英文标题】:How to make UITableView inherit custom subclass of UIViewController? 【发布时间】:2011-06-11 03:03:54 【问题描述】:

我是 ios 开发的新手。我有两个表格视图和一个内容详细信息视图,如下所示:

PopularContentViewController : UITableViewController
LatestContentViewController : UITableViewController
ContentDetailViewController : UIViewController

我想添加一些身份验证,以便在加载任何这些控制器之前,我可以确保用户已登录,如果没有,则显示模式登录视图控制器。

我的想法是创建我自己的 UIViewController 子类(比如 AuthenticatedViewController)并让我的其他控制器继承它。问题是,我该如何做这样的事情:

PopularContentViewController : UITableViewController : AuthenticatedViewController
LatestContentViewController : UITableViewController : AuthenticatedViewController
ContentDetailViewController : AuthenticatedViewController

我发现了这个类似的问题:Can I create a UITableViewController that inherits from a custom subclass of UIViewController?

...但我想知道除了继承或创建我自己的 UITableViewController 来扩展我的 AuthenticatedTableViewController 之外,是否还有其他方法可以做到这一点?也许通过协议或使用委托代替?只是在寻找正确方向的推动力。

【问题讨论】:

【参考方案1】:

Uitableviewcontrollers 是一个 UIViewController。但是你这样做是错误的。创建一个用于身份验证的根视图控制器,也许将其放在导航控制器中。然后一个用户通过身份验证,将您的一个 tableview 控制器推送到堆栈上(或在运行时完全替换原始控制器并保存它的凭据)。 ...

或者,如果您坚持使用类别或单例来处理身份验证后端的东西(尽可能将 UI 排除在外)。我会为每个作业使用一个视图控制器(在导航控制器容器中)......简化,伙计,简化。

【讨论】:

是的,这类似于我考虑的另一种方式:检查应用程序委托中的凭据,如果它们无效,则放置一个模式登录视图控制器。一旦他们登录,我将加载我的根视图控制器(UITabBarController)。我唯一不喜欢这种方法的是它基本上锁定了整个应用程序,并且可能有一些视图(例如,只有一个选项卡)不需要被锁定。也许这不是一个交易破坏者。 您可以在标签栏中启用/禁用选择性标签项。当网络不可用时,我使用它来关闭部分应用程序。因此,请运行您的检查并禁用这些选项卡,直到他们登录为止。这些选项卡的其余部分仍然可用。【参考方案2】:

在objective-c 中你只能从一个超类继承。没有办法继承多个类。您可以尝试另一种方法,例如您可以将 AuthenticatedViewController 保留在 appDelegate 中,并且您可以从任何类访问它,因为 appDelegate 是一个单例类。所以这样你就可以实现你想要的功能了。

【讨论】:

我试图远离单例方法,因为它感觉有点不雅,但也许我错了。我是 iOS 开发的新手,所以我想看看是否有其他人用来实现这种事情的更好的通用方法。感谢您的意见。

以上是关于如何让 UITableView 继承 UIViewController 的自定义子类?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 UITableView 上添加 UIView

如何让 UITableView 继承 UIViewController 的自定义子类?

UIView里面的UITableView

UIView中的UITableView与swift

当 UITableView 是 UIView 的子视图时不调用 NSFetchedResultsControllerDelegate 方法(最初加载数据)

正确定位 UITableView