2016-08-24 47 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

相關問題