情况:
我正在使用 Monotouch 进行 iOS 开发 (C#),其中一个主要类是 UIViewController。iOS 库(或第三方)中有很多现有的类可以从中实现,并且还有很多函数调用返回 UIViewController 对象。
我现在创建了一个应该在子类中实现的抽象函数,它必须返回一个 "UIViewController with a PageNumber parameter"。
我有以下抽象方法(我的方法):
public abstract PageViewController GetPageViewController(int pageNumber);
和:
public class PageViewController: UIViewController{
public int PageNumber = 0;
...
所以我得到了一个 UIViewController,它有一个“PageNumber”参数(正是我需要的)。创建 UIViewController 时,我从“PageViewController”而不是“UIViewController”派生。
我的问题:
iOS 有很多从 UIViewController 派生的子类。例如,UICollectionViewController。
如果我想使用“UICollectionViewController”,我不能从“PageViewController”派生,因为它没有在“UICollectionViewController”中实现的附加功能。
唯一的方法是将“PageViewController”更改为
public class PageViewController: UICollectionViewController{
但是,如果我需要传递 UIViewController 的另一个子类,我又被卡住了。
创建一个包含两个参数(一个 UIViewController 和一个 PageNumber)的对象也是不可能的,因为 iOS 将使用 UIViewController 并且我需要能够在稍后从 iOS 获取 UIViewController 对象时检索页码。
以我目前的知识拥有“东西”的唯一方法是:
1) 改变
public abstract PageViewController GetPageViewController(int pageNumber);
至
public abstract UIViewController GetPageViewController(int pageNumber);
这将确保您可以传递“任何” UIViewController(包括所有子类)
2)定义一个带参数PageNumber的接口(例如IPageNumber)
3) 你应该传递一个 UIViewController 的文档,它也实现了这个额外的接口
4)当UIViewController在某个点返回时,检查它是否也是一个“IPageNumber”。如果不是,则抛出错误。
当然,这将在运行时而不是在编译时引发错误。
有谁知道这个问题是否有更好的解决方案?
PS:我是一个没有经验的爱好开发者,如果我的一些术语不正确,请道歉。我也搜索过,但找不到任何东西(也是因为我不知道要搜索的好关键字)