2016-08-24 46 views
2

我有五个视图控制器都从一个基本视图控制器继承。我的baseVC包含共享功能,例如启动或停止活动idnicator或检查Internet活动。风险投资看起来像下面创建TableViewController和UIViewController都从一个BaseViewController继承

class BaseVC: UIViewController { } 
class NewsFeedVC: BaseViewController { } 
class MakePostVC: BaseViewController { } 
class NotificationVC: BaseViewController { } 
class MoreVC: BaseViewController { } 
class CollectionVC: BaseViewController { } 

我NewsFeedVC和NotificaitionVC(从故事板)是由正常的UIViewController构建了的tableView狼狈不堪。因此,这所有的作品。不过,我正考虑将这两个VC从故事板改为UITableViewController,而不是将tableView拖入viewController。原因是因为拉刷新周围有一些错误,如果tableView是在UIViewcontroller内部构造的,导致tableView跳转。但是,如果NewsFeedVC和NotificationVC继承自下面的UItableViewController,我将无法再使用BaseVC中的函数。我如何构造这个来实现我的愿望?

class NewsFeedVC: UITableViewController { } 
class MakePostVC: UITableViewController { } 
+0

你是什么意思,tableview跳转? – hasan83

回答

4

安装协议在BaseViewController与您希望NewsFeedVC类继承,然后使用委托

在你给他们打电话BaseVC添加此功能: - 在

prtotocol baseVCDelegate{ 

    func activityIndic() 
    func checkInternetConnect() 
} 

    class BaseVC : UIViewController{ 
    .... 
    var delegate : baseVCDelegate! 
    .... 
    .. 
    func activityIndic(){ 
    .. 
    .. 
    } 
    .. 

    func checkInternetConnect(){ 
    .. 
    .. 
    } 
    } 

NewsFeedVC申明类型变量BaseVC

var baseVCHandler : BaseVC = BaseVC() 

转让其委托中自viewDidLoad()

baseVCHandler.delegate = self 

然后访问您的协议符合所有功能!

PS: - 通过这个https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem,可能会帮助你理解为什么swift不喜欢钝的多继承类,将清除你的基本知识。

1

创建UIViewController一个extension,并放置在extension

extension UIViewController{ 

    func showActivityIndicator() 
    { 
     // write your code to show Activity Indicator 
    } 
    func hideActivityIndicator() 
    { 
     // write your code to hide Activity Indicator 
    } 

    func checkInternetConnection() -> Bool 
    { 
     return true // write your code to check connection 
    } 
} 

所有这些常用的方法来创建一个扩展Xcode的文件菜单 - >新建 - >文件 - >选择雨燕文件并将它命名为你的愿望。并为上述任何类创建扩展。

之后你可以调用这些方法像self.hideActivityIndicator()

0

我建议修复拉刷新的bug,而不是与你的结构失踪了的。我使用拉来在UIViewController刷新,其中UITableView没有问题。

refreshControl = [[UIRefreshControl alloc] init]; 
[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged]; 
[refreshControl setTintColor:[self.stylingDetails themeColor]]; 
[oppTableView addSubview:refreshControl]; 

- (void)refresh:(UIRefreshControl *)refresh { 
} 

注:

一个UITableViewController丢失了一个UIViewController具备的功能。 这可能会导致无法解决的新问题取决于控制器的 功能。

+0

这将是理想!但是,您是否遇到此问题需要刷新?请参阅http://stackoverflow.com/questions/31011734/why-uirefreshcontrol-jumping当你“缓慢”拉下tableview刷新时,你可以看到很多东西,最后tableView跳下20到30点 – user172902

相关问题